title: Organization url: https://platform.claude.com/docs/en/api/beta/organization
Organization
Get Current Organization
GET /v1/organizations/me
Retrieve information about the organization associated with the authenticated API key.
Returns
-
BetaOrganization object-
type: "organization"Object type.
For Organizations, this is always
"organization".default: organization
-
id: stringID of the Organization.
format: uuid
-
name: stringName of the Organization.
-
Example
curl https://api.anthropic.com/v1/organizations/me \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "12345678-1234-5678-1234-567812345678",
"name": "Organization Name",
"type": "organization"
}Domain types
Beta Organization
-
BetaOrganization object-
type: "organization"Object type.
For Organizations, this is always
"organization".default: organization
-
id: stringID of the Organization.
format: uuid
-
name: stringName of the Organization.
-
Beta Organization Role
-
BetaOrganizationRole = "admin" or "billing" or "claude_code_user" or 6 more-
"admin" -
"billing" -
"claude_code_user" -
"developer" -
"managed" -
"membership_admin" -
"owner" -
"primary_owner" -
"user"
-
Organization › API Keys
List API Keys
GET /v1/organizations/api_keys
List API Keys
Query parameters
-
after_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately after this object.
-
before_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately before this object.
-
created_by_user_id: optional stringFilter by the ID of the User who created the object.
-
limit: optional numberNumber of items to return per page.
Defaults to
20. Ranges from1to1000.default: 20, maximum: 1000, minimum: 1
-
status: optional "active" or "archived" or "expired" or "inactive"Filter by API key status.
-
"active" -
"archived" -
"expired" -
"inactive"
-
-
workspace_id: optional stringFilter by Workspace ID.
Returns
-
data: array of BetaAPIKey-
type: "api_key"Object type.
For API Keys, this is always
"api_key".default: api_key
-
id: stringID of the API key.
-
created_at: stringRFC 3339 datetime string indicating when the API Key was created.
format: date-time
-
created_by: BetaAPIKeyCreatedBy or nullThe ID and type of the actor that created the API key, or
nullwhen the creator is not recorded (legacy, workload-identity-federated, or system-created keys).-
type: "service_account" or "user"Type of the actor that created the object.
-
"service_account" -
"user"
-
-
id: stringID of the actor that created the object.
-
-
expires_at: string or nullRFC 3339 datetime string indicating when the API Key expires, or
nullif it never expires.format: date-time
-
name: stringName of the API key.
-
partial_key_hint: string or nullPartially redacted hint for the API key.
-
principal: BetaAPIKeyUserActor or BetaAPIKeyServiceAccountActor or nullThe principal the API key acts as (a User or a Service Account), or
nullif the API key is not bound to a principal.-
BetaAPIKeyUserActor object-
type: "user_actor"Principal type. Always
"user_actor"for a User.default: user_actor
-
user_id: stringID of the User the API key acts as.
-
-
BetaAPIKeyServiceAccountActor object-
type: "service_account_actor"Principal type. Always
"service_account_actor"for a Service Account.default: service_account_actor
-
service_account_id: stringID of the Service Account the API key acts as.
-
-
-
scope: BetaAPIKeyOrganizationScope or BetaAPIKeyWorkspaceScopeWhere the API key belongs: its Workspace (
{"type": "workspace", "workspace_id": "wrkspc_..."}, with the Workspace's real ID even when it is the organization's default Workspace), or the organization ({"type": "organization"}) for a principal-bound API key that has no Workspace.-
BetaAPIKeyOrganizationScope object-
type: "organization"Scope type. Always
"organization": the API key has no Workspace. Only a principal-bound API key can have this scope.default: organization
-
-
BetaAPIKeyWorkspaceScope object-
type: "workspace"Scope type. Always
"workspace": the API key belongs to one Workspace.default: workspace
-
workspace_id: stringID of the Workspace the API key belongs to. Unlike the deprecated top-level
workspace_id, this is the Workspace's real ID even for the organization's default Workspace.
-
-
-
status: "active" or "archived" or "expired" or "inactive"Status of the API key.
-
"active" -
"archived" -
"expired" -
"inactive"
-
-
workspace_id: string or nullDeprecated: Use
scopeinstead.workspace_idisnullboth for an API key in the default Workspace and for a principal-bound API key that has no Workspace.Deprecated: use
scopeinstead. ID of the Workspace associated with the API key, ornullif the API key belongs to the default Workspace. Alsonullfor a principal-bound API key that has no Workspace;scopetells the two apart.
-
-
first_id: string or nullFirst ID in the
datalist. Can be used as thebefore_idfor the previous page. -
has_more: booleanIndicates if there are more results in the requested page direction.
-
last_id: string or nullLast ID in the
datalist. Can be used as theafter_idfor the next page.
Example
curl https://api.anthropic.com/v1/organizations/api_keys \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "apikey_01Rj2N8SVvo6BePZj99NhmiT",
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by": {
"id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"type": "user"
},
"expires_at": "2024-10-30T23:58:27.427722Z",
"name": "Developer Key",
"partial_key_hint": "sk-ant-api03-R2D...igAA",
"principal": {
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"scope": {
"type": "workspace",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
},
"status": "active",
"type": "api_key",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
}
],
"first_id": "first_id",
"has_more": true,
"last_id": "last_id"
}Retrieve API Key (Admin API)
GET /v1/organizations/api_keys/{api_key_id}
Retrieve information about a single API key in your organization, looked up by its ID. This Admin API endpoint requires an Admin API key, is intended for programmatic key management, and never returns the key's secret value. To view or create your own API keys, go to API keys in the Claude Console.
Path parameters
-
api_key_id: stringID of the API key.
Returns
-
BetaAPIKey object-
type: "api_key"Object type.
For API Keys, this is always
"api_key".default: api_key
-
id: stringID of the API key.
-
created_at: stringRFC 3339 datetime string indicating when the API Key was created.
format: date-time
-
created_by: BetaAPIKeyCreatedBy or nullThe ID and type of the actor that created the API key, or
nullwhen the creator is not recorded (legacy, workload-identity-federated, or system-created keys).-
type: "service_account" or "user"Type of the actor that created the object.
-
"service_account" -
"user"
-
-
id: stringID of the actor that created the object.
-
-
expires_at: string or nullRFC 3339 datetime string indicating when the API Key expires, or
nullif it never expires.format: date-time
-
name: stringName of the API key.
-
partial_key_hint: string or nullPartially redacted hint for the API key.
-
principal: BetaAPIKeyUserActor or BetaAPIKeyServiceAccountActor or nullThe principal the API key acts as (a User or a Service Account), or
nullif the API key is not bound to a principal.-
BetaAPIKeyUserActor object-
type: "user_actor"Principal type. Always
"user_actor"for a User.default: user_actor
-
user_id: stringID of the User the API key acts as.
-
-
BetaAPIKeyServiceAccountActor object-
type: "service_account_actor"Principal type. Always
"service_account_actor"for a Service Account.default: service_account_actor
-
service_account_id: stringID of the Service Account the API key acts as.
-
-
-
scope: BetaAPIKeyOrganizationScope or BetaAPIKeyWorkspaceScopeWhere the API key belongs: its Workspace (
{"type": "workspace", "workspace_id": "wrkspc_..."}, with the Workspace's real ID even when it is the organization's default Workspace), or the organization ({"type": "organization"}) for a principal-bound API key that has no Workspace.-
BetaAPIKeyOrganizationScope object-
type: "organization"Scope type. Always
"organization": the API key has no Workspace. Only a principal-bound API key can have this scope.default: organization
-
-
BetaAPIKeyWorkspaceScope object-
type: "workspace"Scope type. Always
"workspace": the API key belongs to one Workspace.default: workspace
-
workspace_id: stringID of the Workspace the API key belongs to. Unlike the deprecated top-level
workspace_id, this is the Workspace's real ID even for the organization's default Workspace.
-
-
-
status: "active" or "archived" or "expired" or "inactive"Status of the API key.
-
"active" -
"archived" -
"expired" -
"inactive"
-
-
workspace_id: string or nullDeprecated: Use
scopeinstead.workspace_idisnullboth for an API key in the default Workspace and for a principal-bound API key that has no Workspace.Deprecated: use
scopeinstead. ID of the Workspace associated with the API key, ornullif the API key belongs to the default Workspace. Alsonullfor a principal-bound API key that has no Workspace;scopetells the two apart.
-
Example
curl https://api.anthropic.com/v1/organizations/api_keys/$API_KEY_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "apikey_01Rj2N8SVvo6BePZj99NhmiT",
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by": {
"id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"type": "user"
},
"expires_at": "2024-10-30T23:58:27.427722Z",
"name": "Developer Key",
"partial_key_hint": "sk-ant-api03-R2D...igAA",
"principal": {
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"scope": {
"type": "workspace",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
},
"status": "active",
"type": "api_key",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
}Update API Key
POST /v1/organizations/api_keys/{api_key_id}
Update API Key
Path parameters
-
api_key_id: stringID of the API key.
Body parameters
-
name: optional string or nullName of the API key.
maxLength: 500, minLength: 1
-
status: optional "active" or "archived" or "inactive" or nullStatus of the API key.
-
"active" -
"archived" -
"inactive"
-
Returns
-
BetaAPIKey object-
type: "api_key"Object type.
For API Keys, this is always
"api_key".default: api_key
-
id: stringID of the API key.
-
created_at: stringRFC 3339 datetime string indicating when the API Key was created.
format: date-time
-
created_by: BetaAPIKeyCreatedBy or nullThe ID and type of the actor that created the API key, or
nullwhen the creator is not recorded (legacy, workload-identity-federated, or system-created keys).-
type: "service_account" or "user"Type of the actor that created the object.
-
"service_account" -
"user"
-
-
id: stringID of the actor that created the object.
-
-
expires_at: string or nullRFC 3339 datetime string indicating when the API Key expires, or
nullif it never expires.format: date-time
-
name: stringName of the API key.
-
partial_key_hint: string or nullPartially redacted hint for the API key.
-
principal: BetaAPIKeyUserActor or BetaAPIKeyServiceAccountActor or nullThe principal the API key acts as (a User or a Service Account), or
nullif the API key is not bound to a principal.-
BetaAPIKeyUserActor object-
type: "user_actor"Principal type. Always
"user_actor"for a User.default: user_actor
-
user_id: stringID of the User the API key acts as.
-
-
BetaAPIKeyServiceAccountActor object-
type: "service_account_actor"Principal type. Always
"service_account_actor"for a Service Account.default: service_account_actor
-
service_account_id: stringID of the Service Account the API key acts as.
-
-
-
scope: BetaAPIKeyOrganizationScope or BetaAPIKeyWorkspaceScopeWhere the API key belongs: its Workspace (
{"type": "workspace", "workspace_id": "wrkspc_..."}, with the Workspace's real ID even when it is the organization's default Workspace), or the organization ({"type": "organization"}) for a principal-bound API key that has no Workspace.-
BetaAPIKeyOrganizationScope object-
type: "organization"Scope type. Always
"organization": the API key has no Workspace. Only a principal-bound API key can have this scope.default: organization
-
-
BetaAPIKeyWorkspaceScope object-
type: "workspace"Scope type. Always
"workspace": the API key belongs to one Workspace.default: workspace
-
workspace_id: stringID of the Workspace the API key belongs to. Unlike the deprecated top-level
workspace_id, this is the Workspace's real ID even for the organization's default Workspace.
-
-
-
status: "active" or "archived" or "expired" or "inactive"Status of the API key.
-
"active" -
"archived" -
"expired" -
"inactive"
-
-
workspace_id: string or nullDeprecated: Use
scopeinstead.workspace_idisnullboth for an API key in the default Workspace and for a principal-bound API key that has no Workspace.Deprecated: use
scopeinstead. ID of the Workspace associated with the API key, ornullif the API key belongs to the default Workspace. Alsonullfor a principal-bound API key that has no Workspace;scopetells the two apart.
-
Example
curl https://api.anthropic.com/v1/organizations/api_keys/$API_KEY_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{}'Response (200)
{
"id": "apikey_01Rj2N8SVvo6BePZj99NhmiT",
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by": {
"id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"type": "user"
},
"expires_at": "2024-10-30T23:58:27.427722Z",
"name": "Developer Key",
"partial_key_hint": "sk-ant-api03-R2D...igAA",
"principal": {
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"scope": {
"type": "workspace",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
},
"status": "active",
"type": "api_key",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
}Organization › External Keys
Create External Key
POST /v1/organizations/external_keys
Create an external key config owned by the caller's organization.
Body parameters
-
provider_config: BetaAWSExternalKeyConfig or BetaGCPExternalKeyConfig or BetaAzureExternalKeyConfigParamKMS provider identity and auth coordinates.
-
BetaAWSExternalKeyConfig object-
type: "aws" -
kms_arn: stringFull ARN of the AWS KMS key. On Claude Platform on AWS the key must be a single-Region key in your organization's own AWS account; cross-account keys, multi-Region keys, and alias ARNs are rejected.
maxLength: 2048
-
region: optional string or nullAWS region. Derived from
kms_arnif omitted. -
role_arn: optional string or nullDeprecated
IAM role ARN. Deprecated — Anthropic reaches the KMS key through its own intermediate role (or, on Claude Platform on AWS, with credentials AWS issues for the Workspace); this field is ignored.
-
-
BetaGCPExternalKeyConfig object-
type: "gcp" -
key_name: stringFull resource name of the Cloud KMS key.
-
-
BetaAzureExternalKeyConfigParam objectAzure Key Vault provider configuration.
-
type: "azure" -
key_name: stringName of the key within the vault.
-
tenant_id: stringAzure AD tenant ID.
-
vault_uri: stringKey Vault data-plane URI —
https://{vault-name}.vault.azure.netorhttps://{hsm-name}.managedhsm.azure.net. -
client_id: optional string or nullAzure AD application (client) ID. Omit to use Anthropic's multitenant app. Provide only if using a single-tenant app registration in the customer's directory.
-
-
-
display_name: optional string or nullHuman-friendly display name.
maxLength: 255, minLength: 1
-
geo: optional "us"Data residency geo. Only
usis supported.
Returns
-
BetaExternalKey objectCMEK external key config belonging to the caller's organization.
Configs are organization-scoped. Workspaces attach to a config; once any workspace references it, the provider fields become effectively immutable (existing encrypted data needs the config for decrypt).
-
type: "external_key"default: external_key
-
id: stringIdentifier of the external key config. A tagged ID prefixed
ekey_, or — for organizations on the Claude Platform on AWS — the AWS KMS key ARN. -
attachment: BetaExternalKeyAttachedAttachment or BetaExternalKeyUnattachedAttachmentWhether any workspace uses this config to encrypt its data — counting live and archived workspaces (an archived workspace's data remains encrypted under the config), excluding deleted ones. Only an attached config is used by the encryption path; an
unattachedconfig is inert and can be deleted.-
BetaExternalKeyAttachedAttachment object-
type: "attached"default: attached
-
-
BetaExternalKeyUnattachedAttachment object-
type: "unattached"default: unattached
-
-
-
created_at: stringformat: date-time
-
display_name: string or nullHuman-friendly display name. Null if none was set.
-
geo: stringData residency geo. Selects which regional validator handles this key's encrypt/decrypt roundtrips.
-
provider_config: BetaAWSExternalKeyConfig or BetaGCPExternalKeyConfig or BetaAzureExternalKeyConfigKMS provider identity and auth coordinates.
-
BetaAWSExternalKeyConfig object-
type: "aws" -
kms_arn: stringFull ARN of the AWS KMS key. On Claude Platform on AWS the key must be a single-Region key in your organization's own AWS account; cross-account keys, multi-Region keys, and alias ARNs are rejected.
maxLength: 2048
-
region: optional string or nullAWS region. Derived from
kms_arnif omitted. -
role_arn: optional string or nullDeprecated
IAM role ARN. Deprecated — Anthropic reaches the KMS key through its own intermediate role (or, on Claude Platform on AWS, with credentials AWS issues for the Workspace); this field is ignored.
-
-
BetaGCPExternalKeyConfig object-
type: "gcp" -
key_name: stringFull resource name of the Cloud KMS key.
-
-
BetaAzureExternalKeyConfig object-
type: "azure" -
key_name: stringName of the key within the vault.
-
tenant_id: stringAzure AD tenant ID.
-
vault_uri: stringKey Vault data-plane URI —
https://{vault-name}.vault.azure.netorhttps://{hsm-name}.managedhsm.azure.net. -
client_id: optional string or nullAzure AD application (client) ID. Omit to use Anthropic's multitenant app. Provide only if using a single-tenant app registration in the customer's directory.
-
-
-
updated_at: stringformat: date-time
-
Example
curl https://api.anthropic.com/v1/organizations/external_keys \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"provider_config": {
"kms_arn": "arn:aws:kms:us-east-1:111122223333:key/abcd1234-5678-90ab-cdef-000011112222",
"type": "aws"
}
}'Response (200)
{
"id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"attachment": {
"type": "attached"
},
"created_at": "2024-10-30T23:58:27.427722Z",
"display_name": "prod-us-key",
"geo": "us",
"provider_config": {
"kms_arn": "arn:aws:kms:us-east-1:111122223333:key/abcd1234-5678-90ab-cdef-000011112222",
"type": "aws",
"region": "us-east-1",
"role_arn": "arn:aws:iam::111122223333:role/anthropic-cmek"
},
"type": "external_key",
"updated_at": "2024-10-30T23:58:27.427722Z"
}List External Keys
GET /v1/organizations/external_keys
List external key configs in the caller's organization.
Results are ordered by creation time (newest first). Use the
next_page cursor from the response to fetch subsequent pages.
Query parameters
-
limit: optional numberNumber of results per page.
default: 20, maximum: 100, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_page.
Returns
-
data: array of BetaExternalKey-
type: "external_key"default: external_key
-
id: stringIdentifier of the external key config. A tagged ID prefixed
ekey_, or — for organizations on the Claude Platform on AWS — the AWS KMS key ARN. -
attachment: BetaExternalKeyAttachedAttachment or BetaExternalKeyUnattachedAttachmentWhether any workspace uses this config to encrypt its data — counting live and archived workspaces (an archived workspace's data remains encrypted under the config), excluding deleted ones. Only an attached config is used by the encryption path; an
unattachedconfig is inert and can be deleted.-
BetaExternalKeyAttachedAttachment object-
type: "attached"default: attached
-
-
BetaExternalKeyUnattachedAttachment object-
type: "unattached"default: unattached
-
-
-
created_at: stringformat: date-time
-
display_name: string or nullHuman-friendly display name. Null if none was set.
-
geo: stringData residency geo. Selects which regional validator handles this key's encrypt/decrypt roundtrips.
-
provider_config: BetaAWSExternalKeyConfig or BetaGCPExternalKeyConfig or BetaAzureExternalKeyConfigKMS provider identity and auth coordinates.
-
BetaAWSExternalKeyConfig object-
type: "aws" -
kms_arn: stringFull ARN of the AWS KMS key. On Claude Platform on AWS the key must be a single-Region key in your organization's own AWS account; cross-account keys, multi-Region keys, and alias ARNs are rejected.
maxLength: 2048
-
region: optional string or nullAWS region. Derived from
kms_arnif omitted. -
role_arn: optional string or nullDeprecated
IAM role ARN. Deprecated — Anthropic reaches the KMS key through its own intermediate role (or, on Claude Platform on AWS, with credentials AWS issues for the Workspace); this field is ignored.
-
-
BetaGCPExternalKeyConfig object-
type: "gcp" -
key_name: stringFull resource name of the Cloud KMS key.
-
-
BetaAzureExternalKeyConfig object-
type: "azure" -
key_name: stringName of the key within the vault.
-
tenant_id: stringAzure AD tenant ID.
-
vault_uri: stringKey Vault data-plane URI —
https://{vault-name}.vault.azure.netorhttps://{hsm-name}.managedhsm.azure.net. -
client_id: optional string or nullAzure AD application (client) ID. Omit to use Anthropic's multitenant app. Provide only if using a single-tenant app registration in the customer's directory.
-
-
-
updated_at: stringformat: date-time
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results. Pass as
?page=to fetch the next page.
Example
curl https://api.anthropic.com/v1/organizations/external_keys \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"attachment": {
"type": "attached"
},
"created_at": "2024-10-30T23:58:27.427722Z",
"display_name": "prod-us-key",
"geo": "us",
"provider_config": {
"kms_arn": "arn:aws:kms:us-east-1:111122223333:key/abcd1234-5678-90ab-cdef-000011112222",
"type": "aws",
"region": "us-east-1",
"role_arn": "arn:aws:iam::111122223333:role/anthropic-cmek"
},
"type": "external_key",
"updated_at": "2024-10-30T23:58:27.427722Z"
}
],
"next_page": "next_page"
}Get External Key
GET /v1/organizations/external_keys/{external_key_id}
Retrieve a single external key config in the caller's organization by ID.
Path parameters
-
external_key_id: stringID of the External Key.
maxLength: 2048
Returns
-
BetaExternalKey objectCMEK external key config belonging to the caller's organization.
Configs are organization-scoped. Workspaces attach to a config; once any workspace references it, the provider fields become effectively immutable (existing encrypted data needs the config for decrypt).
-
type: "external_key"default: external_key
-
id: stringIdentifier of the external key config. A tagged ID prefixed
ekey_, or — for organizations on the Claude Platform on AWS — the AWS KMS key ARN. -
attachment: BetaExternalKeyAttachedAttachment or BetaExternalKeyUnattachedAttachmentWhether any workspace uses this config to encrypt its data — counting live and archived workspaces (an archived workspace's data remains encrypted under the config), excluding deleted ones. Only an attached config is used by the encryption path; an
unattachedconfig is inert and can be deleted.-
BetaExternalKeyAttachedAttachment object-
type: "attached"default: attached
-
-
BetaExternalKeyUnattachedAttachment object-
type: "unattached"default: unattached
-
-
-
created_at: stringformat: date-time
-
display_name: string or nullHuman-friendly display name. Null if none was set.
-
geo: stringData residency geo. Selects which regional validator handles this key's encrypt/decrypt roundtrips.
-
provider_config: BetaAWSExternalKeyConfig or BetaGCPExternalKeyConfig or BetaAzureExternalKeyConfigKMS provider identity and auth coordinates.
-
BetaAWSExternalKeyConfig object-
type: "aws" -
kms_arn: stringFull ARN of the AWS KMS key. On Claude Platform on AWS the key must be a single-Region key in your organization's own AWS account; cross-account keys, multi-Region keys, and alias ARNs are rejected.
maxLength: 2048
-
region: optional string or nullAWS region. Derived from
kms_arnif omitted. -
role_arn: optional string or nullDeprecated
IAM role ARN. Deprecated — Anthropic reaches the KMS key through its own intermediate role (or, on Claude Platform on AWS, with credentials AWS issues for the Workspace); this field is ignored.
-
-
BetaGCPExternalKeyConfig object-
type: "gcp" -
key_name: stringFull resource name of the Cloud KMS key.
-
-
BetaAzureExternalKeyConfig object-
type: "azure" -
key_name: stringName of the key within the vault.
-
tenant_id: stringAzure AD tenant ID.
-
vault_uri: stringKey Vault data-plane URI —
https://{vault-name}.vault.azure.netorhttps://{hsm-name}.managedhsm.azure.net. -
client_id: optional string or nullAzure AD application (client) ID. Omit to use Anthropic's multitenant app. Provide only if using a single-tenant app registration in the customer's directory.
-
-
-
updated_at: stringformat: date-time
-
Example
curl https://api.anthropic.com/v1/organizations/external_keys/$EXTERNAL_KEY_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"attachment": {
"type": "attached"
},
"created_at": "2024-10-30T23:58:27.427722Z",
"display_name": "prod-us-key",
"geo": "us",
"provider_config": {
"kms_arn": "arn:aws:kms:us-east-1:111122223333:key/abcd1234-5678-90ab-cdef-000011112222",
"type": "aws",
"region": "us-east-1",
"role_arn": "arn:aws:iam::111122223333:role/anthropic-cmek"
},
"type": "external_key",
"updated_at": "2024-10-30T23:58:27.427722Z"
}Update External Key
POST /v1/organizations/external_keys/{external_key_id}
Partially update an external key config. Omitted fields are left unchanged.
display_name is always editable. geo and provider_config cannot
be changed once any workspace references this config, because previously
encrypted data requires the original key identity to decrypt.
Path parameters
-
external_key_id: stringID of the External Key.
maxLength: 2048
Body parameters
-
display_name: optional string or nullHuman-friendly display name.
maxLength: 255, minLength: 1
-
geo: optional "us" or nullData residency geo. Only
usis supported. -
provider_config: optional BetaAWSExternalKeyConfig or BetaGCPExternalKeyConfig or BetaAzureExternalKeyConfigParam or nullKMS provider identity and auth coordinates.
-
BetaAWSExternalKeyConfig object-
type: "aws" -
kms_arn: stringFull ARN of the AWS KMS key. On Claude Platform on AWS the key must be a single-Region key in your organization's own AWS account; cross-account keys, multi-Region keys, and alias ARNs are rejected.
maxLength: 2048
-
region: optional string or nullAWS region. Derived from
kms_arnif omitted. -
role_arn: optional string or nullDeprecated
IAM role ARN. Deprecated — Anthropic reaches the KMS key through its own intermediate role (or, on Claude Platform on AWS, with credentials AWS issues for the Workspace); this field is ignored.
-
-
BetaGCPExternalKeyConfig object-
type: "gcp" -
key_name: stringFull resource name of the Cloud KMS key.
-
-
BetaAzureExternalKeyConfigParam objectAzure Key Vault provider configuration.
-
type: "azure" -
key_name: stringName of the key within the vault.
-
tenant_id: stringAzure AD tenant ID.
-
vault_uri: stringKey Vault data-plane URI —
https://{vault-name}.vault.azure.netorhttps://{hsm-name}.managedhsm.azure.net. -
client_id: optional string or nullAzure AD application (client) ID. Omit to use Anthropic's multitenant app. Provide only if using a single-tenant app registration in the customer's directory.
-
-
Returns
-
BetaExternalKey objectCMEK external key config belonging to the caller's organization.
Configs are organization-scoped. Workspaces attach to a config; once any workspace references it, the provider fields become effectively immutable (existing encrypted data needs the config for decrypt).
-
type: "external_key"default: external_key
-
id: stringIdentifier of the external key config. A tagged ID prefixed
ekey_, or — for organizations on the Claude Platform on AWS — the AWS KMS key ARN. -
attachment: BetaExternalKeyAttachedAttachment or BetaExternalKeyUnattachedAttachmentWhether any workspace uses this config to encrypt its data — counting live and archived workspaces (an archived workspace's data remains encrypted under the config), excluding deleted ones. Only an attached config is used by the encryption path; an
unattachedconfig is inert and can be deleted.-
BetaExternalKeyAttachedAttachment object-
type: "attached"default: attached
-
-
BetaExternalKeyUnattachedAttachment object-
type: "unattached"default: unattached
-
-
-
created_at: stringformat: date-time
-
display_name: string or nullHuman-friendly display name. Null if none was set.
-
geo: stringData residency geo. Selects which regional validator handles this key's encrypt/decrypt roundtrips.
-
provider_config: BetaAWSExternalKeyConfig or BetaGCPExternalKeyConfig or BetaAzureExternalKeyConfigKMS provider identity and auth coordinates.
-
BetaAWSExternalKeyConfig object-
type: "aws" -
kms_arn: stringFull ARN of the AWS KMS key. On Claude Platform on AWS the key must be a single-Region key in your organization's own AWS account; cross-account keys, multi-Region keys, and alias ARNs are rejected.
maxLength: 2048
-
region: optional string or nullAWS region. Derived from
kms_arnif omitted. -
role_arn: optional string or nullDeprecated
IAM role ARN. Deprecated — Anthropic reaches the KMS key through its own intermediate role (or, on Claude Platform on AWS, with credentials AWS issues for the Workspace); this field is ignored.
-
-
BetaGCPExternalKeyConfig object-
type: "gcp" -
key_name: stringFull resource name of the Cloud KMS key.
-
-
BetaAzureExternalKeyConfig object-
type: "azure" -
key_name: stringName of the key within the vault.
-
tenant_id: stringAzure AD tenant ID.
-
vault_uri: stringKey Vault data-plane URI —
https://{vault-name}.vault.azure.netorhttps://{hsm-name}.managedhsm.azure.net. -
client_id: optional string or nullAzure AD application (client) ID. Omit to use Anthropic's multitenant app. Provide only if using a single-tenant app registration in the customer's directory.
-
-
-
updated_at: stringformat: date-time
-
Example
curl https://api.anthropic.com/v1/organizations/external_keys/$EXTERNAL_KEY_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{}'Response (200)
{
"id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"attachment": {
"type": "attached"
},
"created_at": "2024-10-30T23:58:27.427722Z",
"display_name": "prod-us-key",
"geo": "us",
"provider_config": {
"kms_arn": "arn:aws:kms:us-east-1:111122223333:key/abcd1234-5678-90ab-cdef-000011112222",
"type": "aws",
"region": "us-east-1",
"role_arn": "arn:aws:iam::111122223333:role/anthropic-cmek"
},
"type": "external_key",
"updated_at": "2024-10-30T23:58:27.427722Z"
}Delete External Key
DELETE /v1/organizations/external_keys/{external_key_id}
Delete an external key config.
The request is rejected if any workspace still references this config.
Path parameters
-
external_key_id: stringID of the External Key.
maxLength: 2048
Returns
-
type: "external_key_deleted"default: external_key_deleted
-
id: stringID of the deleted External Key.
Example
curl https://api.anthropic.com/v1/organizations/external_keys/$EXTERNAL_KEY_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "ekey_01AbCdEfGhIjKlMnOpQrStUv",
"type": "external_key_deleted"
}Validate External Key
POST /v1/organizations/external_keys/{external_key_id}/validate
Validate an external key config against the customer's KMS.
Anthropic performs an encrypt/decrypt roundtrip against the configured
KMS key and waits up to 30 seconds for the result. The response status is
success if the roundtrip succeeded, or failure with an error
message if it failed or timed out.
Path parameters
-
external_key_id: stringID of the External Key.
maxLength: 2048
Returns
-
type: "external_key_validation"default: external_key_validation
-
error: string or nullError message when status is
failure. Null otherwise. -
status: "failure" or "success"success— encrypt/decrypt roundtrip succeeded.failure— the roundtrip failed or timed out; seeerror.-
"failure" -
"success"
-
Example
curl https://api.anthropic.com/v1/organizations/external_keys/$EXTERNAL_KEY_ID/validate \
-X POST \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"error": "error",
"status": "failure",
"type": "external_key_validation"
}Organization › Federation › Issuers
Create Federation Issuer
POST /v1/organizations/federation_issuers
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Register an OIDC issuer that Anthropic will trust for workload identity federation in your organization.
The jwks field controls how the issuer's signing keys are obtained and
takes one of three shapes selected by type: discovery (resolve keys
through OIDC discovery), explicit_url (fetch keys from a fixed JWKS
URL), or inline (provide a static key set). When jwks.type is
discovery and no discovery_base is set, the issuer URL must be
publicly reachable over HTTPS so Anthropic can fetch the discovery
document; for explicit_url and inline modes the issuer URL is only
matched as the JWT's iss claim and is not fetched.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
issuer_url: stringThe
issclaim value to match against.minLength: 1
-
name: stringSlug identifier (lowercase, digits, hyphens). Unique within the organization; a duplicate name returns 409.
maxLength: 255, minLength: 1
-
check_jti: optional boolean or nullWhether the jwt-bearer exchange enforces JTI single-use (replay protection) for tokens from this issuer. Defaults to true. Applies only to assertions carrying a
jticlaim; tokens without one are accepted without single-use enforcement. -
jwks: optional BetaJWKSDiscovery or BetaJWKSExplicitURL or BetaJWKSInlineHow signing keys are obtained. Defaults to OIDC discovery.
-
BetaJWKSDiscovery objectJWKS via the issuer's OIDC discovery document.
-
type: "discovery" -
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
discovery_base: optional string or nullSet when the discovery URL differs from
issuer_url.
-
-
BetaJWKSExplicitURL objectJWKS fetched from a fixed endpoint.
-
type: "explicit_url" -
url: stringJWKS endpoint.
minLength: 1
-
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
-
BetaJWKSInline objectJWKS supplied directly; no network fetch.
-
type: "inline" -
keys: array of map[unknown]Inline JWK objects.
minItems: 1
-
-
-
max_jwt_lifetime_seconds: optional number or nullMaximum allowed iat→exp spread for assertions from this issuer (1-176400 seconds, i.e. up to 49h). Defaults to 3600 (1h). Assertions must carry both
iatandexp; a missingiatis rejected.maximum: 176400, exclusiveMinimum: 0
Returns
-
BetaFederationIssuer objectRegistered external OIDC identity provider.
Records an external IdP the organization trusts for the RFC 7523 jwt-bearer grant. The
issuer_urlmust match the JWTissclaim exactly.-
type: "federation_issuer"default: federation_issuer
-
id: stringTagged ID of the federation issuer.
-
archived_at: string or nullIf set, all rules referencing this issuer reject token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this issuer. -
check_jti: booleanWhether the jwt-bearer exchange enforces JTI single-use (replay protection) for tokens from this issuer. Applies only to assertions carrying a
jticlaim; tokens without one are accepted without single-use enforcement. -
created_at: stringWhen this issuer was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this issuer. -
issuer_url: stringThe
issclaim value. Incoming JWTs must match exactly. -
jwks: BetaJWKSDiscovery or BetaJWKSExplicitURL or BetaJWKSInlineHow signing keys are obtained for signature verification.
-
BetaJWKSDiscovery objectJWKS via the issuer's OIDC discovery document.
-
type: "discovery" -
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
discovery_base: optional string or nullSet when the discovery URL differs from
issuer_url.
-
-
BetaJWKSExplicitURL objectJWKS fetched from a fixed endpoint.
-
type: "explicit_url" -
url: stringJWKS endpoint.
minLength: 1
-
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
-
BetaJWKSInline objectJWKS supplied directly; no network fetch.
-
type: "inline" -
keys: array of map[unknown]Inline JWK objects.
minItems: 1
-
-
-
jwks_polling_disabled_at: string or nullIf set, Anthropic's JWKS poller has paused polling for this issuer after repeated fetch failures. Re-enable by sending
jwks_polling_disabled: falsevia the issuer update endpoint (POST) once the upstream JWKS endpoint is fixed. An OAuth caller cannot send this when the issuer backs a rule with any scope other thanworkspace:developerorworkspace:inference; use a Console session.format: date-time
-
max_jwt_lifetime_seconds: numberMaximum allowed iat→exp spread for assertions from this issuer (1-176400 seconds, i.e. up to 49h). Assertions must carry both
iatandexp; a missingiatis rejected. -
name: stringAdmin-chosen slug identifier.
-
poll_status: BetaFederationIssuerPollStatus or nullStatus of automatic JWKS polling for a federation issuer.
Anthropic periodically fetches the issuer's signing keys in the background. These fields summarize the most recent fetches so the health of the JWKS endpoint can be monitored.
-
consecutive_failures: numberConsecutive fetch failures since the last success.
-
last_fetched_at: string or nullWhen the last successful fetch completed.
format: date-time
-
next_poll_at: string or nullWhen the next fetch is scheduled. Null if paused.
format: date-time
-
-
updated_at: stringWhen this issuer was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this issuer.
-
Example
curl https://api.anthropic.com/v1/organizations/federation_issuers \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"issuer_url": "x",
"name": "x"
}'Response (200)
{
"id": "fdis_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"check_jti": true,
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"issuer_url": "https://token.actions.githubusercontent.com",
"jwks": {
"type": "discovery",
"ca_cert_pem": "ca_cert_pem",
"discovery_base": "discovery_base"
},
"jwks_polling_disabled_at": "2019-12-27T18:11:19.117Z",
"max_jwt_lifetime_seconds": 0,
"name": "github-actions",
"poll_status": {
"consecutive_failures": 0,
"last_fetched_at": "2019-12-27T18:11:19.117Z",
"next_poll_at": "2019-12-27T18:11:19.117Z"
},
"type": "federation_issuer",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}List Federation Issuers
GET /v1/organizations/federation_issuers
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
List federation issuers in your organization.
Archived issuers are excluded unless include_archived=true.
Query parameters
-
include_archived: optional booleanInclude archived resources. Defaults to false.
default: false
-
limit: optional numberNumber of results per page.
default: 20, maximum: 100, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_page.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
data: array of BetaFederationIssuer-
type: "federation_issuer"default: federation_issuer
-
id: stringTagged ID of the federation issuer.
-
archived_at: string or nullIf set, all rules referencing this issuer reject token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this issuer. -
check_jti: booleanWhether the jwt-bearer exchange enforces JTI single-use (replay protection) for tokens from this issuer. Applies only to assertions carrying a
jticlaim; tokens without one are accepted without single-use enforcement. -
created_at: stringWhen this issuer was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this issuer. -
issuer_url: stringThe
issclaim value. Incoming JWTs must match exactly. -
jwks: BetaJWKSDiscovery or BetaJWKSExplicitURL or BetaJWKSInlineHow signing keys are obtained for signature verification.
-
BetaJWKSDiscovery objectJWKS via the issuer's OIDC discovery document.
-
type: "discovery" -
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
discovery_base: optional string or nullSet when the discovery URL differs from
issuer_url.
-
-
BetaJWKSExplicitURL objectJWKS fetched from a fixed endpoint.
-
type: "explicit_url" -
url: stringJWKS endpoint.
minLength: 1
-
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
-
BetaJWKSInline objectJWKS supplied directly; no network fetch.
-
type: "inline" -
keys: array of map[unknown]Inline JWK objects.
minItems: 1
-
-
-
jwks_polling_disabled_at: string or nullIf set, Anthropic's JWKS poller has paused polling for this issuer after repeated fetch failures. Re-enable by sending
jwks_polling_disabled: falsevia the issuer update endpoint (POST) once the upstream JWKS endpoint is fixed. An OAuth caller cannot send this when the issuer backs a rule with any scope other thanworkspace:developerorworkspace:inference; use a Console session.format: date-time
-
max_jwt_lifetime_seconds: numberMaximum allowed iat→exp spread for assertions from this issuer (1-176400 seconds, i.e. up to 49h). Assertions must carry both
iatandexp; a missingiatis rejected. -
name: stringAdmin-chosen slug identifier.
-
poll_status: BetaFederationIssuerPollStatus or nullStatus of automatic JWKS polling for a federation issuer.
Anthropic periodically fetches the issuer's signing keys in the background. These fields summarize the most recent fetches so the health of the JWKS endpoint can be monitored.
-
consecutive_failures: numberConsecutive fetch failures since the last success.
-
last_fetched_at: string or nullWhen the last successful fetch completed.
format: date-time
-
next_poll_at: string or nullWhen the next fetch is scheduled. Null if paused.
format: date-time
-
-
updated_at: stringWhen this issuer was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this issuer.
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results.
Example
curl https://api.anthropic.com/v1/organizations/federation_issuers \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "fdis_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"check_jti": true,
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"issuer_url": "https://token.actions.githubusercontent.com",
"jwks": {
"type": "discovery",
"ca_cert_pem": "ca_cert_pem",
"discovery_base": "discovery_base"
},
"jwks_polling_disabled_at": "2019-12-27T18:11:19.117Z",
"max_jwt_lifetime_seconds": 0,
"name": "github-actions",
"poll_status": {
"consecutive_failures": 0,
"last_fetched_at": "2019-12-27T18:11:19.117Z",
"next_poll_at": "2019-12-27T18:11:19.117Z"
},
"type": "federation_issuer",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}
],
"next_page": "next_page"
}Get Federation Issuer
GET /v1/organizations/federation_issuers/{federation_issuer_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Retrieve a federation issuer by its ID (fdis_...).
Path parameters
-
federation_issuer_id: stringID of the federation issuer.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaFederationIssuer objectRegistered external OIDC identity provider.
Records an external IdP the organization trusts for the RFC 7523 jwt-bearer grant. The
issuer_urlmust match the JWTissclaim exactly.-
type: "federation_issuer"default: federation_issuer
-
id: stringTagged ID of the federation issuer.
-
archived_at: string or nullIf set, all rules referencing this issuer reject token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this issuer. -
check_jti: booleanWhether the jwt-bearer exchange enforces JTI single-use (replay protection) for tokens from this issuer. Applies only to assertions carrying a
jticlaim; tokens without one are accepted without single-use enforcement. -
created_at: stringWhen this issuer was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this issuer. -
issuer_url: stringThe
issclaim value. Incoming JWTs must match exactly. -
jwks: BetaJWKSDiscovery or BetaJWKSExplicitURL or BetaJWKSInlineHow signing keys are obtained for signature verification.
-
BetaJWKSDiscovery objectJWKS via the issuer's OIDC discovery document.
-
type: "discovery" -
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
discovery_base: optional string or nullSet when the discovery URL differs from
issuer_url.
-
-
BetaJWKSExplicitURL objectJWKS fetched from a fixed endpoint.
-
type: "explicit_url" -
url: stringJWKS endpoint.
minLength: 1
-
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
-
BetaJWKSInline objectJWKS supplied directly; no network fetch.
-
type: "inline" -
keys: array of map[unknown]Inline JWK objects.
minItems: 1
-
-
-
jwks_polling_disabled_at: string or nullIf set, Anthropic's JWKS poller has paused polling for this issuer after repeated fetch failures. Re-enable by sending
jwks_polling_disabled: falsevia the issuer update endpoint (POST) once the upstream JWKS endpoint is fixed. An OAuth caller cannot send this when the issuer backs a rule with any scope other thanworkspace:developerorworkspace:inference; use a Console session.format: date-time
-
max_jwt_lifetime_seconds: numberMaximum allowed iat→exp spread for assertions from this issuer (1-176400 seconds, i.e. up to 49h). Assertions must carry both
iatandexp; a missingiatis rejected. -
name: stringAdmin-chosen slug identifier.
-
poll_status: BetaFederationIssuerPollStatus or nullStatus of automatic JWKS polling for a federation issuer.
Anthropic periodically fetches the issuer's signing keys in the background. These fields summarize the most recent fetches so the health of the JWKS endpoint can be monitored.
-
consecutive_failures: numberConsecutive fetch failures since the last success.
-
last_fetched_at: string or nullWhen the last successful fetch completed.
format: date-time
-
next_poll_at: string or nullWhen the next fetch is scheduled. Null if paused.
format: date-time
-
-
updated_at: stringWhen this issuer was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this issuer.
-
Example
curl https://api.anthropic.com/v1/organizations/federation_issuers/$FEDERATION_ISSUER_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "fdis_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"check_jti": true,
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"issuer_url": "https://token.actions.githubusercontent.com",
"jwks": {
"type": "discovery",
"ca_cert_pem": "ca_cert_pem",
"discovery_base": "discovery_base"
},
"jwks_polling_disabled_at": "2019-12-27T18:11:19.117Z",
"max_jwt_lifetime_seconds": 0,
"name": "github-actions",
"poll_status": {
"consecutive_failures": 0,
"last_fetched_at": "2019-12-27T18:11:19.117Z",
"next_poll_at": "2019-12-27T18:11:19.117Z"
},
"type": "federation_issuer",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}Update Federation Issuer
POST /v1/organizations/federation_issuers/{federation_issuer_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Partially update a federation issuer.
Setting jwks replaces the full JWKS shape at once. Archived issuers
cannot be updated; this returns 400. Create a new issuer instead.
Updating an issuer that backs a rule with a scope outside
workspace:developer or workspace:inference requires a Console
session.
Path parameters
-
federation_issuer_id: stringID of the federation issuer to update.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
check_jti: optional boolean or nullWhether the jwt-bearer exchange enforces JTI single-use (replay protection) for tokens from this issuer. Applies only to assertions carrying a
jticlaim; tokens without one are accepted without single-use enforcement. -
issuer_url: optional string or nullReplaces the
issclaim value to match against. For discovery-mode issuers without adiscovery_base, this is also the URL Anthropic fetches the OIDC discovery document and signing keys from, so changing it repoints the JWKS source. Changing the issuer URL to a well-known shared platform is rejected while any live rule under this issuer would not constrain tenant identity.minLength: 1
-
jwks: optional BetaJWKSDiscovery or BetaJWKSExplicitURL or BetaJWKSInline or nullReplaces the entire JWKS configuration.
-
BetaJWKSDiscovery objectJWKS via the issuer's OIDC discovery document.
-
type: "discovery" -
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
discovery_base: optional string or nullSet when the discovery URL differs from
issuer_url.
-
-
BetaJWKSExplicitURL objectJWKS fetched from a fixed endpoint.
-
type: "explicit_url" -
url: stringJWKS endpoint.
minLength: 1
-
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
-
BetaJWKSInline objectJWKS supplied directly; no network fetch.
-
type: "inline" -
keys: array of map[unknown]Inline JWK objects.
minItems: 1
-
-
-
jwks_polling_disabled: optional boolean or nullOnly
falseis accepted, to re-enable polling after the system pauses it. Polling is paused automatically; sendingtrueis rejected. -
max_jwt_lifetime_seconds: optional number or nullMaximum allowed iat→exp spread for assertions from this issuer (1-176400 seconds, i.e. up to 49h). Assertions must carry both
iatandexp; a missingiatis rejected.maximum: 176400, exclusiveMinimum: 0
-
name: optional string or nullReplaces the slug identifier (lowercase, digits, hyphens). Unique within the organization; a duplicate name returns 409.
maxLength: 255, minLength: 1
Returns
-
BetaFederationIssuer objectRegistered external OIDC identity provider.
Records an external IdP the organization trusts for the RFC 7523 jwt-bearer grant. The
issuer_urlmust match the JWTissclaim exactly.-
type: "federation_issuer"default: federation_issuer
-
id: stringTagged ID of the federation issuer.
-
archived_at: string or nullIf set, all rules referencing this issuer reject token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this issuer. -
check_jti: booleanWhether the jwt-bearer exchange enforces JTI single-use (replay protection) for tokens from this issuer. Applies only to assertions carrying a
jticlaim; tokens without one are accepted without single-use enforcement. -
created_at: stringWhen this issuer was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this issuer. -
issuer_url: stringThe
issclaim value. Incoming JWTs must match exactly. -
jwks: BetaJWKSDiscovery or BetaJWKSExplicitURL or BetaJWKSInlineHow signing keys are obtained for signature verification.
-
BetaJWKSDiscovery objectJWKS via the issuer's OIDC discovery document.
-
type: "discovery" -
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
discovery_base: optional string or nullSet when the discovery URL differs from
issuer_url.
-
-
BetaJWKSExplicitURL objectJWKS fetched from a fixed endpoint.
-
type: "explicit_url" -
url: stringJWKS endpoint.
minLength: 1
-
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
-
BetaJWKSInline objectJWKS supplied directly; no network fetch.
-
type: "inline" -
keys: array of map[unknown]Inline JWK objects.
minItems: 1
-
-
-
jwks_polling_disabled_at: string or nullIf set, Anthropic's JWKS poller has paused polling for this issuer after repeated fetch failures. Re-enable by sending
jwks_polling_disabled: falsevia the issuer update endpoint (POST) once the upstream JWKS endpoint is fixed. An OAuth caller cannot send this when the issuer backs a rule with any scope other thanworkspace:developerorworkspace:inference; use a Console session.format: date-time
-
max_jwt_lifetime_seconds: numberMaximum allowed iat→exp spread for assertions from this issuer (1-176400 seconds, i.e. up to 49h). Assertions must carry both
iatandexp; a missingiatis rejected. -
name: stringAdmin-chosen slug identifier.
-
poll_status: BetaFederationIssuerPollStatus or nullStatus of automatic JWKS polling for a federation issuer.
Anthropic periodically fetches the issuer's signing keys in the background. These fields summarize the most recent fetches so the health of the JWKS endpoint can be monitored.
-
consecutive_failures: numberConsecutive fetch failures since the last success.
-
last_fetched_at: string or nullWhen the last successful fetch completed.
format: date-time
-
next_poll_at: string or nullWhen the next fetch is scheduled. Null if paused.
format: date-time
-
-
updated_at: stringWhen this issuer was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this issuer.
-
Example
curl https://api.anthropic.com/v1/organizations/federation_issuers/$FEDERATION_ISSUER_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{}'Response (200)
{
"id": "fdis_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"check_jti": true,
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"issuer_url": "https://token.actions.githubusercontent.com",
"jwks": {
"type": "discovery",
"ca_cert_pem": "ca_cert_pem",
"discovery_base": "discovery_base"
},
"jwks_polling_disabled_at": "2019-12-27T18:11:19.117Z",
"max_jwt_lifetime_seconds": 0,
"name": "github-actions",
"poll_status": {
"consecutive_failures": 0,
"last_fetched_at": "2019-12-27T18:11:19.117Z",
"next_poll_at": "2019-12-27T18:11:19.117Z"
},
"type": "federation_issuer",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}Archive Federation Issuer
POST /v1/organizations/federation_issuers/{federation_issuer_id}/archive
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Archive a federation issuer.
Idempotent; re-archiving returns the issuer with its original
archived_at. Rejected with 400 if any live (non-archived) federation
rule still references the issuer; archive those rules first (a rule's
issuer cannot be changed), or recreate them against another issuer.
Path parameters
-
federation_issuer_id: stringID of the federation issuer to archive.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaFederationIssuer objectRegistered external OIDC identity provider.
Records an external IdP the organization trusts for the RFC 7523 jwt-bearer grant. The
issuer_urlmust match the JWTissclaim exactly.-
type: "federation_issuer"default: federation_issuer
-
id: stringTagged ID of the federation issuer.
-
archived_at: string or nullIf set, all rules referencing this issuer reject token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this issuer. -
check_jti: booleanWhether the jwt-bearer exchange enforces JTI single-use (replay protection) for tokens from this issuer. Applies only to assertions carrying a
jticlaim; tokens without one are accepted without single-use enforcement. -
created_at: stringWhen this issuer was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this issuer. -
issuer_url: stringThe
issclaim value. Incoming JWTs must match exactly. -
jwks: BetaJWKSDiscovery or BetaJWKSExplicitURL or BetaJWKSInlineHow signing keys are obtained for signature verification.
-
BetaJWKSDiscovery objectJWKS via the issuer's OIDC discovery document.
-
type: "discovery" -
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
discovery_base: optional string or nullSet when the discovery URL differs from
issuer_url.
-
-
BetaJWKSExplicitURL objectJWKS fetched from a fixed endpoint.
-
type: "explicit_url" -
url: stringJWKS endpoint.
minLength: 1
-
ca_cert_pem: optional string or nullOptional custom CA (PEM) for TLS verification of the JWKS fetch.
maxLength: 8192
-
-
BetaJWKSInline objectJWKS supplied directly; no network fetch.
-
type: "inline" -
keys: array of map[unknown]Inline JWK objects.
minItems: 1
-
-
-
jwks_polling_disabled_at: string or nullIf set, Anthropic's JWKS poller has paused polling for this issuer after repeated fetch failures. Re-enable by sending
jwks_polling_disabled: falsevia the issuer update endpoint (POST) once the upstream JWKS endpoint is fixed. An OAuth caller cannot send this when the issuer backs a rule with any scope other thanworkspace:developerorworkspace:inference; use a Console session.format: date-time
-
max_jwt_lifetime_seconds: numberMaximum allowed iat→exp spread for assertions from this issuer (1-176400 seconds, i.e. up to 49h). Assertions must carry both
iatandexp; a missingiatis rejected. -
name: stringAdmin-chosen slug identifier.
-
poll_status: BetaFederationIssuerPollStatus or nullStatus of automatic JWKS polling for a federation issuer.
Anthropic periodically fetches the issuer's signing keys in the background. These fields summarize the most recent fetches so the health of the JWKS endpoint can be monitored.
-
consecutive_failures: numberConsecutive fetch failures since the last success.
-
last_fetched_at: string or nullWhen the last successful fetch completed.
format: date-time
-
next_poll_at: string or nullWhen the next fetch is scheduled. Null if paused.
format: date-time
-
-
updated_at: stringWhen this issuer was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this issuer.
-
Example
curl https://api.anthropic.com/v1/organizations/federation_issuers/$FEDERATION_ISSUER_ID/archive \
-X POST \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "fdis_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"check_jti": true,
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"issuer_url": "https://token.actions.githubusercontent.com",
"jwks": {
"type": "discovery",
"ca_cert_pem": "ca_cert_pem",
"discovery_base": "discovery_base"
},
"jwks_polling_disabled_at": "2019-12-27T18:11:19.117Z",
"max_jwt_lifetime_seconds": 0,
"name": "github-actions",
"poll_status": {
"consecutive_failures": 0,
"last_fetched_at": "2019-12-27T18:11:19.117Z",
"next_poll_at": "2019-12-27T18:11:19.117Z"
},
"type": "federation_issuer",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}Organization › Federation › Rules
Create Federation Rule
POST /v1/organizations/federation_rules
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Create a federation rule owned by your organization.
The referenced issuer and the target service account must already exist
in the same organization; invalid references are rejected with a 400
error. The workspace reference is validated. Membership is not checked
at rule creation: token exchange resolves a single enabled workspace per
call and is rejected unless the target service account is a member of
that workspace (it is implicitly a member of the default workspace).
Rules on well-known shared issuers (GitHub Actions, GitLab, Buildkite,
Terraform Cloud, Google) must constrain tenant identity via an
identity-bearing claim, a tenant-pinning subject prefix (such as
repo:YOUR_ORG/...), or a CEL condition referencing one of those
identity claims (e.g. claims.repository_owner). OAuth callers may only
manage rules whose oauth_scope is workspace:developer or
workspace:inference; other scopes require a Console session.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
issuer_id: stringTagged ID of the federation issuer.
-
match: BetaFederationRuleMatchConditions the verified JWT must satisfy for this rule to apply. At least one of
subject_prefix(other than a wildcard-only value like*),claims, orconditionis required;audiencealone is not sufficient.-
audience: optional string or nullExact match against the
audclaim (any element if array). When omitted, the JWT'saudmust still equal Anthropic's expected audience for the issuer; setting this field overrides that default.maxLength: 1024
-
claims: optional map[string] or nullExact-match
{claim: value}pairs against top-level claims. Only string-valued claims can be matched; useconditionfor non-string claims. -
condition: optional string or nullCEL expression over claims for logic the structural fields can't express. Must evaluate to a boolean and may reference only the
claimsvariable; a constant-true expression (such astrue) is rejected with 400.maxLength: 4096
-
subject_prefix: optional string or nullMatch the verified JWT
subclaim. Exact match unless the value ends with*, in which case it is a prefix match. Example:repo:my-org/my-repo:ref:refs/heads/main.maxLength: 1024
-
-
name: stringSlug identifier (lowercase, digits, hyphens). Unique within the organization; a duplicate name returns 409.
maxLength: 255, minLength: 1
-
oauth_scope: stringSpace-separated OAuth scopes. OAuth callers may only set
workspace:developerorworkspace:inference; other scopes (such asorg:admin) require a Console session.minLength: 1
-
target: BetaServiceAccountTargetIdentity that tokens minted via this rule act as. Currently always a
service_accounttarget.-
type: "service_account" -
service_account_id: stringTagged ID of the service account to mint tokens for.
-
service_account_name: optional string or nullService account's display name at read time. Ignored on writes.
-
-
applies_to_all_workspaces: optional booleanWhen true, enable this rule for every workspace in the org (including workspaces created later).
-
attributes: optional map[string] or nullCEL expressions
{name: expr}extracting named values from claims. Not yet supported; any non-empty value is rejected with 400. -
description: optional string or nullOptional free-text description.
maxLength: 2000
-
token_lifetime_seconds: optional numberLifetime in seconds for access tokens minted via this rule (60-86400). Defaults to 3600 (1h). Minted tokens are capped at
max(60, min(this value, 2 × remaining assertion validity))seconds.maximum: 86400, minimum: 60
-
workspace_id: optional string or nullTagged ID of the workspace to enable this rule for. Required unless
applies_to_all_workspacesis true. Additional workspaces can be added via the/federation_rules/{federation_rule_id}/workspacessub-resource.
Returns
-
BetaFederationRule objectAuthorization rule binding an external OIDC identity to Anthropic.
Evaluates the match conditions and mints an OAuth access token for the resolved target, scoped to a single workspace where the rule is enabled (chosen by the caller at exchange time when the rule is enabled for more than one). For rules enabled via
workspace_idsorapplies_to_all_workspaces, the target service account must be a member of that workspace (it is implicitly a member of the default workspace); rules carrying only the legacyworkspace_idbinding do not enforce this.-
type: "federation_rule"default: federation_rule
-
id: stringTagged ID of the federation rule.
-
applies_to_all_workspaces: booleanWhen true, this rule is enabled for every workspace in the org (including ones created after the rule).
workspace_idsis ignored at exchange time. -
archived_at: string or nullIf set, this rule is archived and rejects token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this rule. -
attributes: map[string] or nullCEL expressions extracting named values from claims. Not yet supported; always null.
-
created_at: stringWhen this rule was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this rule. -
description: string or nullOptional free-text description.
-
issuer_id: stringTagged ID of the issuer whose tokens this rule accepts.
-
issuer_name: string or nullIssuer's display name at read time.
-
match: BetaFederationRuleMatchConditions the verified JWT must satisfy for this rule to apply. All populated matcher fields must pass.
-
audience: optional string or nullExact match against the
audclaim (any element if array). When omitted, the JWT'saudmust still equal Anthropic's expected audience for the issuer; setting this field overrides that default.maxLength: 1024
-
claims: optional map[string] or nullExact-match
{claim: value}pairs against top-level claims. Only string-valued claims can be matched; useconditionfor non-string claims. -
condition: optional string or nullCEL expression over claims for logic the structural fields can't express. Must evaluate to a boolean and may reference only the
claimsvariable; a constant-true expression (such astrue) is rejected with 400.maxLength: 4096
-
subject_prefix: optional string or nullMatch the verified JWT
subclaim. Exact match unless the value ends with*, in which case it is a prefix match. Example:repo:my-org/my-repo:ref:refs/heads/main.maxLength: 1024
-
-
name: stringAdmin-chosen slug identifier.
-
oauth_scope: stringSpace-separated OAuth scopes granted on the minted token.
-
target: BetaServiceAccountTargetIdentity that tokens minted via this rule act as. Currently always a
service_accounttarget.-
type: "service_account" -
service_account_id: stringTagged ID of the service account to mint tokens for.
-
service_account_name: optional string or nullService account's display name at read time. Ignored on writes.
-
-
token_lifetime_seconds: numberLifetime in seconds of access tokens minted via this rule. Minted tokens are capped at
max(60, min(this value, 2 × remaining assertion validity))seconds. -
updated_at: stringWhen this rule was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this rule. -
workspace_id: string or nullLegacy single-workspace binding. Prefer
workspace_idsand the/federation_rules/{federation_rule_id}/workspacessub-resource for managing workspace enablement. -
workspace_ids: array of stringTagged IDs of the workspaces this rule is enabled for. May be empty for older rules that only carry the legacy
workspace_idbinding. Ignored at exchange time whenapplies_to_all_workspacesis true (the list may still be non-empty).
-
Example
curl https://api.anthropic.com/v1/organizations/federation_rules \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"issuer_id": "issuer_id",
"match": {},
"name": "x",
"oauth_scope": "x",
"target": {
"service_account_id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"type": "service_account"
}
}'Response (200)
{
"id": "fdrl_01SDCCSbTxrXDpWc1phhtcfK",
"applies_to_all_workspaces": true,
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"attributes": {
"foo": "string"
},
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"issuer_id": "issuer_id",
"issuer_name": "issuer_name",
"match": {
"audience": "audience",
"claims": {
"foo": "string"
},
"condition": "condition",
"subject_prefix": "subject_prefix"
},
"name": "prod-deploy-pipeline",
"oauth_scope": "oauth_scope",
"target": {
"service_account_id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"type": "service_account",
"service_account_name": "service_account_name"
},
"token_lifetime_seconds": 0,
"type": "federation_rule",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id",
"workspace_id": "workspace_id",
"workspace_ids": [
"string"
]
}List Federation Rules
GET /v1/organizations/federation_rules
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
List federation rules in your organization.
Optionally filter by issuer with issuer_id. Archived rules are excluded
unless include_archived=true.
Query parameters
-
include_archived: optional booleanInclude archived resources. Defaults to false.
default: false
-
issuer_id: optional stringFilter to rules referencing this federation issuer.
-
limit: optional numberNumber of results per page.
default: 20, maximum: 100, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_page.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
data: array of BetaFederationRule-
type: "federation_rule"default: federation_rule
-
id: stringTagged ID of the federation rule.
-
applies_to_all_workspaces: booleanWhen true, this rule is enabled for every workspace in the org (including ones created after the rule).
workspace_idsis ignored at exchange time. -
archived_at: string or nullIf set, this rule is archived and rejects token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this rule. -
attributes: map[string] or nullCEL expressions extracting named values from claims. Not yet supported; always null.
-
created_at: stringWhen this rule was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this rule. -
description: string or nullOptional free-text description.
-
issuer_id: stringTagged ID of the issuer whose tokens this rule accepts.
-
issuer_name: string or nullIssuer's display name at read time.
-
match: BetaFederationRuleMatchConditions the verified JWT must satisfy for this rule to apply. All populated matcher fields must pass.
-
audience: optional string or nullExact match against the
audclaim (any element if array). When omitted, the JWT'saudmust still equal Anthropic's expected audience for the issuer; setting this field overrides that default.maxLength: 1024
-
claims: optional map[string] or nullExact-match
{claim: value}pairs against top-level claims. Only string-valued claims can be matched; useconditionfor non-string claims. -
condition: optional string or nullCEL expression over claims for logic the structural fields can't express. Must evaluate to a boolean and may reference only the
claimsvariable; a constant-true expression (such astrue) is rejected with 400.maxLength: 4096
-
subject_prefix: optional string or nullMatch the verified JWT
subclaim. Exact match unless the value ends with*, in which case it is a prefix match. Example:repo:my-org/my-repo:ref:refs/heads/main.maxLength: 1024
-
-
name: stringAdmin-chosen slug identifier.
-
oauth_scope: stringSpace-separated OAuth scopes granted on the minted token.
-
target: BetaServiceAccountTargetIdentity that tokens minted via this rule act as. Currently always a
service_accounttarget.-
type: "service_account" -
service_account_id: stringTagged ID of the service account to mint tokens for.
-
service_account_name: optional string or nullService account's display name at read time. Ignored on writes.
-
-
token_lifetime_seconds: numberLifetime in seconds of access tokens minted via this rule. Minted tokens are capped at
max(60, min(this value, 2 × remaining assertion validity))seconds. -
updated_at: stringWhen this rule was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this rule. -
workspace_id: string or nullLegacy single-workspace binding. Prefer
workspace_idsand the/federation_rules/{federation_rule_id}/workspacessub-resource for managing workspace enablement. -
workspace_ids: array of stringTagged IDs of the workspaces this rule is enabled for. May be empty for older rules that only carry the legacy
workspace_idbinding. Ignored at exchange time whenapplies_to_all_workspacesis true (the list may still be non-empty).
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results.
Example
curl https://api.anthropic.com/v1/organizations/federation_rules \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "fdrl_01SDCCSbTxrXDpWc1phhtcfK",
"applies_to_all_workspaces": true,
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"attributes": {
"foo": "string"
},
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"issuer_id": "issuer_id",
"issuer_name": "issuer_name",
"match": {
"audience": "audience",
"claims": {
"foo": "string"
},
"condition": "condition",
"subject_prefix": "subject_prefix"
},
"name": "prod-deploy-pipeline",
"oauth_scope": "oauth_scope",
"target": {
"service_account_id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"type": "service_account",
"service_account_name": "service_account_name"
},
"token_lifetime_seconds": 0,
"type": "federation_rule",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id",
"workspace_id": "workspace_id",
"workspace_ids": [
"string"
]
}
],
"next_page": "next_page"
}Get Federation Rule
GET /v1/organizations/federation_rules/{federation_rule_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Retrieve a federation rule by its ID (fdrl_...).
Path parameters
-
federation_rule_id: stringID of the federation rule.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaFederationRule objectAuthorization rule binding an external OIDC identity to Anthropic.
Evaluates the match conditions and mints an OAuth access token for the resolved target, scoped to a single workspace where the rule is enabled (chosen by the caller at exchange time when the rule is enabled for more than one). For rules enabled via
workspace_idsorapplies_to_all_workspaces, the target service account must be a member of that workspace (it is implicitly a member of the default workspace); rules carrying only the legacyworkspace_idbinding do not enforce this.-
type: "federation_rule"default: federation_rule
-
id: stringTagged ID of the federation rule.
-
applies_to_all_workspaces: booleanWhen true, this rule is enabled for every workspace in the org (including ones created after the rule).
workspace_idsis ignored at exchange time. -
archived_at: string or nullIf set, this rule is archived and rejects token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this rule. -
attributes: map[string] or nullCEL expressions extracting named values from claims. Not yet supported; always null.
-
created_at: stringWhen this rule was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this rule. -
description: string or nullOptional free-text description.
-
issuer_id: stringTagged ID of the issuer whose tokens this rule accepts.
-
issuer_name: string or nullIssuer's display name at read time.
-
match: BetaFederationRuleMatchConditions the verified JWT must satisfy for this rule to apply. All populated matcher fields must pass.
-
audience: optional string or nullExact match against the
audclaim (any element if array). When omitted, the JWT'saudmust still equal Anthropic's expected audience for the issuer; setting this field overrides that default.maxLength: 1024
-
claims: optional map[string] or nullExact-match
{claim: value}pairs against top-level claims. Only string-valued claims can be matched; useconditionfor non-string claims. -
condition: optional string or nullCEL expression over claims for logic the structural fields can't express. Must evaluate to a boolean and may reference only the
claimsvariable; a constant-true expression (such astrue) is rejected with 400.maxLength: 4096
-
subject_prefix: optional string or nullMatch the verified JWT
subclaim. Exact match unless the value ends with*, in which case it is a prefix match. Example:repo:my-org/my-repo:ref:refs/heads/main.maxLength: 1024
-
-
name: stringAdmin-chosen slug identifier.
-
oauth_scope: stringSpace-separated OAuth scopes granted on the minted token.
-
target: BetaServiceAccountTargetIdentity that tokens minted via this rule act as. Currently always a
service_accounttarget.-
type: "service_account" -
service_account_id: stringTagged ID of the service account to mint tokens for.
-
service_account_name: optional string or nullService account's display name at read time. Ignored on writes.
-
-
token_lifetime_seconds: numberLifetime in seconds of access tokens minted via this rule. Minted tokens are capped at
max(60, min(this value, 2 × remaining assertion validity))seconds. -
updated_at: stringWhen this rule was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this rule. -
workspace_id: string or nullLegacy single-workspace binding. Prefer
workspace_idsand the/federation_rules/{federation_rule_id}/workspacessub-resource for managing workspace enablement. -
workspace_ids: array of stringTagged IDs of the workspaces this rule is enabled for. May be empty for older rules that only carry the legacy
workspace_idbinding. Ignored at exchange time whenapplies_to_all_workspacesis true (the list may still be non-empty).
-
Example
curl https://api.anthropic.com/v1/organizations/federation_rules/$FEDERATION_RULE_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "fdrl_01SDCCSbTxrXDpWc1phhtcfK",
"applies_to_all_workspaces": true,
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"attributes": {
"foo": "string"
},
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"issuer_id": "issuer_id",
"issuer_name": "issuer_name",
"match": {
"audience": "audience",
"claims": {
"foo": "string"
},
"condition": "condition",
"subject_prefix": "subject_prefix"
},
"name": "prod-deploy-pipeline",
"oauth_scope": "oauth_scope",
"target": {
"service_account_id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"type": "service_account",
"service_account_name": "service_account_name"
},
"token_lifetime_seconds": 0,
"type": "federation_rule",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id",
"workspace_id": "workspace_id",
"workspace_ids": [
"string"
]
}Update Federation Rule
POST /v1/organizations/federation_rules/{federation_rule_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Partially update a federation rule.
issuer_id is immutable. match and target are replaced as whole
objects when set. Referenced service accounts and workspaces must exist
in your organization; invalid references are rejected with a 400 error.
Archived rules cannot be updated; this returns 400. Create a new rule
instead. Rules on well-known shared issuers (GitHub Actions, GitLab,
Buildkite, Terraform Cloud, Google) must constrain tenant identity via
an identity-bearing claim, a tenant-pinning subject prefix (such as
repo:YOUR_ORG/...), or a CEL condition referencing one of those
identity claims (e.g. claims.repository_owner). On these issuers the
requirement is re-checked on every update; if an existing rule's stored
match does not yet constrain tenant identity, any update (even a rename
or description change) must also supply a conforming match in the same
request. OAuth callers may only manage rules whose oauth_scope is
workspace:developer or workspace:inference; other scopes require a
Console session.
Path parameters
-
federation_rule_id: stringID of the federation rule to update.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
applies_to_all_workspaces: optional boolean or nullWhen true, enables this rule for every workspace in the org (including workspaces created later). Setting
falseis rejected with 400 if no workspace would remain enabled; a rule with only a legacyworkspace_idbinding continues to mint. -
attributes: optional map[string] or nullReplaces the CEL expressions
{name: expr}extracting named values from claims. Send null to clear them. Not yet supported; any non-empty value is rejected with 400. -
description: optional string or nullReplaces the description. Omit to leave unchanged; send
nullto clear (the field is stored as an empty string).maxLength: 2000
-
match: optional BetaFederationRuleMatch or nullDoes the incoming JWT qualify?
All populated fields must pass; omitted fields are skipped. At least one of
subject_prefix(other than a wildcard-only value like*),claims, orconditionis required;audiencealone is not sufficient.-
audience: optional string or nullExact match against the
audclaim (any element if array). When omitted, the JWT'saudmust still equal Anthropic's expected audience for the issuer; setting this field overrides that default.maxLength: 1024
-
claims: optional map[string] or nullExact-match
{claim: value}pairs against top-level claims. Only string-valued claims can be matched; useconditionfor non-string claims. -
condition: optional string or nullCEL expression over claims for logic the structural fields can't express. Must evaluate to a boolean and may reference only the
claimsvariable; a constant-true expression (such astrue) is rejected with 400.maxLength: 4096
-
subject_prefix: optional string or nullMatch the verified JWT
subclaim. Exact match unless the value ends with*, in which case it is a prefix match. Example:repo:my-org/my-repo:ref:refs/heads/main.maxLength: 1024
-
-
name: optional string or nullReplaces the slug identifier (lowercase, digits, hyphens). Unique within the organization; a duplicate name returns 409.
maxLength: 255, minLength: 1
-
oauth_scope: optional string or nullReplaces the space-separated OAuth scopes granted on minted tokens. OAuth callers may only set
workspace:developerorworkspace:inference; other scopes (such asorg:admin) require a Console session.minLength: 1
-
target: optional BetaServiceAccountTarget or nullBind to a fixed service account by ID.
-
type: "service_account" -
service_account_id: stringTagged ID of the service account to mint tokens for.
-
service_account_name: optional string or nullService account's display name at read time. Ignored on writes.
-
-
token_lifetime_seconds: optional number or nullReplaces the lifetime in seconds for access tokens minted via this rule (60-86400). Minted tokens are capped at
max(60, min(this value, 2 × remaining assertion validity))seconds.maximum: 86400, minimum: 60
-
workspace_id: optional string or nullReplaces the existing single workspace enablement (the previous one is removed). Rejected with 400 if the rule is enabled for more than one workspace; use the
/federation_rules/{federation_rule_id}/workspacessub-resource instead.
Returns
-
BetaFederationRule objectAuthorization rule binding an external OIDC identity to Anthropic.
Evaluates the match conditions and mints an OAuth access token for the resolved target, scoped to a single workspace where the rule is enabled (chosen by the caller at exchange time when the rule is enabled for more than one). For rules enabled via
workspace_idsorapplies_to_all_workspaces, the target service account must be a member of that workspace (it is implicitly a member of the default workspace); rules carrying only the legacyworkspace_idbinding do not enforce this.-
type: "federation_rule"default: federation_rule
-
id: stringTagged ID of the federation rule.
-
applies_to_all_workspaces: booleanWhen true, this rule is enabled for every workspace in the org (including ones created after the rule).
workspace_idsis ignored at exchange time. -
archived_at: string or nullIf set, this rule is archived and rejects token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this rule. -
attributes: map[string] or nullCEL expressions extracting named values from claims. Not yet supported; always null.
-
created_at: stringWhen this rule was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this rule. -
description: string or nullOptional free-text description.
-
issuer_id: stringTagged ID of the issuer whose tokens this rule accepts.
-
issuer_name: string or nullIssuer's display name at read time.
-
match: BetaFederationRuleMatchConditions the verified JWT must satisfy for this rule to apply. All populated matcher fields must pass.
-
audience: optional string or nullExact match against the
audclaim (any element if array). When omitted, the JWT'saudmust still equal Anthropic's expected audience for the issuer; setting this field overrides that default.maxLength: 1024
-
claims: optional map[string] or nullExact-match
{claim: value}pairs against top-level claims. Only string-valued claims can be matched; useconditionfor non-string claims. -
condition: optional string or nullCEL expression over claims for logic the structural fields can't express. Must evaluate to a boolean and may reference only the
claimsvariable; a constant-true expression (such astrue) is rejected with 400.maxLength: 4096
-
subject_prefix: optional string or nullMatch the verified JWT
subclaim. Exact match unless the value ends with*, in which case it is a prefix match. Example:repo:my-org/my-repo:ref:refs/heads/main.maxLength: 1024
-
-
name: stringAdmin-chosen slug identifier.
-
oauth_scope: stringSpace-separated OAuth scopes granted on the minted token.
-
target: BetaServiceAccountTargetIdentity that tokens minted via this rule act as. Currently always a
service_accounttarget.-
type: "service_account" -
service_account_id: stringTagged ID of the service account to mint tokens for.
-
service_account_name: optional string or nullService account's display name at read time. Ignored on writes.
-
-
token_lifetime_seconds: numberLifetime in seconds of access tokens minted via this rule. Minted tokens are capped at
max(60, min(this value, 2 × remaining assertion validity))seconds. -
updated_at: stringWhen this rule was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this rule. -
workspace_id: string or nullLegacy single-workspace binding. Prefer
workspace_idsand the/federation_rules/{federation_rule_id}/workspacessub-resource for managing workspace enablement. -
workspace_ids: array of stringTagged IDs of the workspaces this rule is enabled for. May be empty for older rules that only carry the legacy
workspace_idbinding. Ignored at exchange time whenapplies_to_all_workspacesis true (the list may still be non-empty).
-
Example
curl https://api.anthropic.com/v1/organizations/federation_rules/$FEDERATION_RULE_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{}'Response (200)
{
"id": "fdrl_01SDCCSbTxrXDpWc1phhtcfK",
"applies_to_all_workspaces": true,
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"attributes": {
"foo": "string"
},
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"issuer_id": "issuer_id",
"issuer_name": "issuer_name",
"match": {
"audience": "audience",
"claims": {
"foo": "string"
},
"condition": "condition",
"subject_prefix": "subject_prefix"
},
"name": "prod-deploy-pipeline",
"oauth_scope": "oauth_scope",
"target": {
"service_account_id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"type": "service_account",
"service_account_name": "service_account_name"
},
"token_lifetime_seconds": 0,
"type": "federation_rule",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id",
"workspace_id": "workspace_id",
"workspace_ids": [
"string"
]
}Archive Federation Rule
POST /v1/organizations/federation_rules/{federation_rule_id}/archive
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Archive a federation rule.
Token exchange through this rule stops immediately. Idempotent;
re-archiving returns the rule with its original archived_at. Archiving
clears the rule's workspace targeting (workspace_id and
workspace_ids are emptied). Tokens already minted before archive
remain valid until they expire. OAuth callers may only manage rules
whose oauth_scope is workspace:developer or workspace:inference;
other scopes require a Console session.
Path parameters
-
federation_rule_id: stringID of the federation rule to archive.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaFederationRule objectAuthorization rule binding an external OIDC identity to Anthropic.
Evaluates the match conditions and mints an OAuth access token for the resolved target, scoped to a single workspace where the rule is enabled (chosen by the caller at exchange time when the rule is enabled for more than one). For rules enabled via
workspace_idsorapplies_to_all_workspaces, the target service account must be a member of that workspace (it is implicitly a member of the default workspace); rules carrying only the legacyworkspace_idbinding do not enforce this.-
type: "federation_rule"default: federation_rule
-
id: stringTagged ID of the federation rule.
-
applies_to_all_workspaces: booleanWhen true, this rule is enabled for every workspace in the org (including ones created after the rule).
workspace_idsis ignored at exchange time. -
archived_at: string or nullIf set, this rule is archived and rejects token exchange.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this rule. -
attributes: map[string] or nullCEL expressions extracting named values from claims. Not yet supported; always null.
-
created_at: stringWhen this rule was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this rule. -
description: string or nullOptional free-text description.
-
issuer_id: stringTagged ID of the issuer whose tokens this rule accepts.
-
issuer_name: string or nullIssuer's display name at read time.
-
match: BetaFederationRuleMatchConditions the verified JWT must satisfy for this rule to apply. All populated matcher fields must pass.
-
audience: optional string or nullExact match against the
audclaim (any element if array). When omitted, the JWT'saudmust still equal Anthropic's expected audience for the issuer; setting this field overrides that default.maxLength: 1024
-
claims: optional map[string] or nullExact-match
{claim: value}pairs against top-level claims. Only string-valued claims can be matched; useconditionfor non-string claims. -
condition: optional string or nullCEL expression over claims for logic the structural fields can't express. Must evaluate to a boolean and may reference only the
claimsvariable; a constant-true expression (such astrue) is rejected with 400.maxLength: 4096
-
subject_prefix: optional string or nullMatch the verified JWT
subclaim. Exact match unless the value ends with*, in which case it is a prefix match. Example:repo:my-org/my-repo:ref:refs/heads/main.maxLength: 1024
-
-
name: stringAdmin-chosen slug identifier.
-
oauth_scope: stringSpace-separated OAuth scopes granted on the minted token.
-
target: BetaServiceAccountTargetIdentity that tokens minted via this rule act as. Currently always a
service_accounttarget.-
type: "service_account" -
service_account_id: stringTagged ID of the service account to mint tokens for.
-
service_account_name: optional string or nullService account's display name at read time. Ignored on writes.
-
-
token_lifetime_seconds: numberLifetime in seconds of access tokens minted via this rule. Minted tokens are capped at
max(60, min(this value, 2 × remaining assertion validity))seconds. -
updated_at: stringWhen this rule was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this rule. -
workspace_id: string or nullLegacy single-workspace binding. Prefer
workspace_idsand the/federation_rules/{federation_rule_id}/workspacessub-resource for managing workspace enablement. -
workspace_ids: array of stringTagged IDs of the workspaces this rule is enabled for. May be empty for older rules that only carry the legacy
workspace_idbinding. Ignored at exchange time whenapplies_to_all_workspacesis true (the list may still be non-empty).
-
Example
curl https://api.anthropic.com/v1/organizations/federation_rules/$FEDERATION_RULE_ID/archive \
-X POST \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "fdrl_01SDCCSbTxrXDpWc1phhtcfK",
"applies_to_all_workspaces": true,
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"attributes": {
"foo": "string"
},
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"issuer_id": "issuer_id",
"issuer_name": "issuer_name",
"match": {
"audience": "audience",
"claims": {
"foo": "string"
},
"condition": "condition",
"subject_prefix": "subject_prefix"
},
"name": "prod-deploy-pipeline",
"oauth_scope": "oauth_scope",
"target": {
"service_account_id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"type": "service_account",
"service_account_name": "service_account_name"
},
"token_lifetime_seconds": 0,
"type": "federation_rule",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id",
"workspace_id": "workspace_id",
"workspace_ids": [
"string"
]
}Organization › Federation › Rules › Workspaces
Add Federation Rule Workspace
POST /v1/organizations/federation_rules/{federation_rule_id}/workspaces
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Enable a federation rule for a workspace.
Idempotent; re-enabling returns the existing enablement. The rule and
workspace must both belong to your organization. Membership of the
rule's target service account in this workspace is not checked at
enablement: token exchange into this workspace is rejected unless the
target is a member (it is implicitly a member of the default workspace).
Archived rules are rejected with 400. OAuth callers may only manage rules
whose oauth_scope is workspace:developer or workspace:inference;
other scopes require a Console session.
Path parameters
-
federation_rule_id: stringID of the federation rule.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
workspace_id: stringTagged ID of the workspace to enable this rule for.
Returns
-
BetaFederationRuleWorkspace object-
type: "federation_rule_workspace"default: federation_rule_workspace
-
created_at: stringWhen this workspace was enabled for the rule.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_...orsvac_...) of the actor that enabled this workspace for the rule, if known. -
federation_rule_id: stringTagged ID of the federation rule.
-
workspace_id: stringTagged ID of the workspace this rule is enabled for.
-
workspace_name: string or nullWorkspace display name. Populated when listing; null in the enable response.
-
Example
curl https://api.anthropic.com/v1/organizations/federation_rules/$FEDERATION_RULE_ID/workspaces \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"workspace_id": "workspace_id"
}'Response (200)
{
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"federation_rule_id": "federation_rule_id",
"type": "federation_rule_workspace",
"workspace_id": "workspace_id",
"workspace_name": "workspace_name"
}List Federation Rule Workspaces
GET /v1/organizations/federation_rules/{federation_rule_id}/workspaces
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
List workspaces where this federation rule is enabled.
Returns all workspace enablements in a single response; the limit and
page parameters are accepted but have no effect, and next_page is
always null. Returns explicit per-workspace enablements only; for
rules with applies_to_all_workspaces or a legacy single
workspace_id, check those fields on the rule itself.
Path parameters
-
federation_rule_id: stringID of the federation rule.
Query parameters
-
limit: optional numberNumber of results per page.
default: 20, maximum: 100, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_page.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
data: array of BetaFederationRuleWorkspace-
type: "federation_rule_workspace"default: federation_rule_workspace
-
created_at: stringWhen this workspace was enabled for the rule.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_...orsvac_...) of the actor that enabled this workspace for the rule, if known. -
federation_rule_id: stringTagged ID of the federation rule.
-
workspace_id: stringTagged ID of the workspace this rule is enabled for.
-
workspace_name: string or nullWorkspace display name. Populated when listing; null in the enable response.
-
-
next_page: string or nullOpaque cursor for the next page; null when there are no more results.
Example
curl https://api.anthropic.com/v1/organizations/federation_rules/$FEDERATION_RULE_ID/workspaces \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"federation_rule_id": "federation_rule_id",
"type": "federation_rule_workspace",
"workspace_id": "workspace_id",
"workspace_name": "workspace_name"
}
],
"next_page": "next_page"
}Remove Federation Rule Workspace
DELETE /v1/organizations/federation_rules/{federation_rule_id}/workspaces/{workspace_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Disable a federation rule for a workspace.
Idempotent; succeeds even if the enablement was already removed. OAuth
callers may only manage rules whose oauth_scope is
workspace:developer or workspace:inference; other scopes require a
Console session.
Path parameters
-
federation_rule_id: stringID of the federation rule.
-
workspace_id: stringID of the workspace to disable for.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
type: "federation_rule_workspace_deleted"default: federation_rule_workspace_deleted
-
federation_rule_id: stringTagged ID of the federation rule.
-
workspace_id: stringTagged ID of the workspace named in the delete request. Removal is idempotent.
Example
curl https://api.anthropic.com/v1/organizations/federation_rules/$FEDERATION_RULE_ID/workspaces/$WORKSPACE_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"federation_rule_id": "federation_rule_id",
"type": "federation_rule_workspace_deleted",
"workspace_id": "workspace_id"
}Organization › Invites
Create Invite
POST /v1/organizations/invites
Invite a user to join the organization by email.
On plans that draw members from a finite pool of purchased seats, the invite automatically consumes a seat from the lowest tier with availability; there is no seat-tier parameter. When no seat is free the request fails with a 400 error rather than purchasing a seat.
Body parameters
-
email: stringEmail of the User.
format: email
-
role: "billing" or "claude_code_user" or "developer" or 2 moreRole for the invited User.
The accepted values depend on the organization type. Console and API organizations accept
user,developer,billing, andclaude_code_user;admincannot be assigned through the API. Claude Enterprise organizations acceptuserandmanaged.-
"billing" -
"claude_code_user" -
"developer" -
"managed" -
"user"
-
-
rbac_group_ids: optional array of stringRBAC group IDs to assign to the User when the Invite is accepted. A non-empty array is accepted only for a Claude Enterprise organization with RBAC groups, and requires the key to carry the
write:rbac_groupsscope.maxItems: 100
Returns
-
BetaOrganizationInvite object-
type: "invite"Object type.
For Invites, this is always
"invite".default: invite
-
id: stringID of the Invite.
-
accepted_at: string or nullRFC 3339 datetime string indicating when the Invite was accepted, or null.
format: date-time
-
email: stringEmail of the User being invited.
-
expires_at: stringRFC 3339 datetime string indicating when the Invite expires.
format: date-time
-
invited_at: stringRFC 3339 datetime string indicating when the Invite was created.
format: date-time
-
rbac_group_ids: array of stringRBAC group IDs recorded on the Invite (Claude Enterprise organizations), to be assigned to the User when the Invite is accepted.
[]when none. -
role: BetaOrganizationRoleOrganization role of the User.
-
"admin" -
"billing" -
"claude_code_user" -
"developer" -
"managed" -
"membership_admin" -
"owner" -
"primary_owner" -
"user"
-
-
status: "accepted" or "deleted" or "expired" or "pending"Status of the Invite.
-
"accepted" -
"deleted" -
"expired" -
"pending"
-
-
Example
curl https://api.anthropic.com/v1/organizations/invites \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"email": "user@emaildomain.com",
"role": "user"
}'Response (200)
{
"id": "invite_015gWxCN9Hfg2QhZwTK7Mdeu",
"accepted_at": "2019-12-27T18:11:19.117Z",
"email": "user@emaildomain.com",
"expires_at": "2024-11-20T23:58:27.427722Z",
"invited_at": "2024-10-30T23:58:27.427722Z",
"rbac_group_ids": [
"string"
],
"role": "admin",
"status": "pending",
"type": "invite"
}List Invites
GET /v1/organizations/invites
List the organization's invites.
Query parameters
-
after_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately after this object.
-
before_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately before this object.
-
email: optional stringFilter by the email address the Invite was sent to. Matches the same way as the Users list's
emailfilter (normalized, case-insensitive).format: email
-
limit: optional numberNumber of items to return per page.
Defaults to
20. Ranges from1to1000.default: 20, maximum: 1000, minimum: 1
-
roles: optional array of stringFilter to items whose
roleequals one of the supplied values. Repeatable; values are OR'ed together.Accepted values depend on the organization type: Console and API organizations accept
user,developer,billing,admin, andclaude_code_user; Claude Enterprise organizations acceptuser,owner,primary_owner,membership_admin, andmanaged. -
statuses: optional array of "accepted" or "expired" or "pending"Filter by Invite status. Repeatable; values are OR'ed together. Omit to return
pending,accepted, andexpiredInvites alike.-
"accepted" -
"expired" -
"pending"
-
Returns
-
data: array of BetaOrganizationInvite-
type: "invite"Object type.
For Invites, this is always
"invite".default: invite
-
id: stringID of the Invite.
-
accepted_at: string or nullRFC 3339 datetime string indicating when the Invite was accepted, or null.
format: date-time
-
email: stringEmail of the User being invited.
-
expires_at: stringRFC 3339 datetime string indicating when the Invite expires.
format: date-time
-
invited_at: stringRFC 3339 datetime string indicating when the Invite was created.
format: date-time
-
rbac_group_ids: array of stringRBAC group IDs recorded on the Invite (Claude Enterprise organizations), to be assigned to the User when the Invite is accepted.
[]when none. -
role: BetaOrganizationRoleOrganization role of the User.
-
"admin" -
"billing" -
"claude_code_user" -
"developer" -
"managed" -
"membership_admin" -
"owner" -
"primary_owner" -
"user"
-
-
status: "accepted" or "deleted" or "expired" or "pending"Status of the Invite.
-
"accepted" -
"deleted" -
"expired" -
"pending"
-
-
-
first_id: string or nullFirst ID in the
datalist. Can be used as thebefore_idfor the previous page. -
has_more: booleanIndicates if there are more results in the requested page direction.
-
last_id: string or nullLast ID in the
datalist. Can be used as theafter_idfor the next page.
Example
curl https://api.anthropic.com/v1/organizations/invites \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "invite_015gWxCN9Hfg2QhZwTK7Mdeu",
"accepted_at": "2019-12-27T18:11:19.117Z",
"email": "user@emaildomain.com",
"expires_at": "2024-11-20T23:58:27.427722Z",
"invited_at": "2024-10-30T23:58:27.427722Z",
"rbac_group_ids": [
"string"
],
"role": "admin",
"status": "pending",
"type": "invite"
}
],
"first_id": "first_id",
"has_more": true,
"last_id": "last_id"
}Get Invite
GET /v1/organizations/invites/{invite_id}
Retrieve an invite by ID.
Path parameters
-
invite_id: stringID of the Invite.
Returns
-
BetaOrganizationInvite object-
type: "invite"Object type.
For Invites, this is always
"invite".default: invite
-
id: stringID of the Invite.
-
accepted_at: string or nullRFC 3339 datetime string indicating when the Invite was accepted, or null.
format: date-time
-
email: stringEmail of the User being invited.
-
expires_at: stringRFC 3339 datetime string indicating when the Invite expires.
format: date-time
-
invited_at: stringRFC 3339 datetime string indicating when the Invite was created.
format: date-time
-
rbac_group_ids: array of stringRBAC group IDs recorded on the Invite (Claude Enterprise organizations), to be assigned to the User when the Invite is accepted.
[]when none. -
role: BetaOrganizationRoleOrganization role of the User.
-
"admin" -
"billing" -
"claude_code_user" -
"developer" -
"managed" -
"membership_admin" -
"owner" -
"primary_owner" -
"user"
-
-
status: "accepted" or "deleted" or "expired" or "pending"Status of the Invite.
-
"accepted" -
"deleted" -
"expired" -
"pending"
-
-
Example
curl https://api.anthropic.com/v1/organizations/invites/$INVITE_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "invite_015gWxCN9Hfg2QhZwTK7Mdeu",
"accepted_at": "2019-12-27T18:11:19.117Z",
"email": "user@emaildomain.com",
"expires_at": "2024-11-20T23:58:27.427722Z",
"invited_at": "2024-10-30T23:58:27.427722Z",
"rbac_group_ids": [
"string"
],
"role": "admin",
"status": "pending",
"type": "invite"
}Delete Invite
DELETE /v1/organizations/invites/{invite_id}
Delete a pending invite.
Path parameters
-
invite_id: stringID of the Invite.
Returns
-
type: "invite_deleted"Deleted object type.
For Invites, this is always
"invite_deleted".default: invite_deleted
-
id: stringID of the Invite.
Example
curl https://api.anthropic.com/v1/organizations/invites/$INVITE_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "invite_015gWxCN9Hfg2QhZwTK7Mdeu",
"type": "invite_deleted"
}Organization › Service Accounts
Create Service Account
POST /v1/organizations/service_accounts
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Create a service account.
A service account is a named workload identity that federation rules
target. organization_role is developer (default) or admin; a rule
may only be created or retargeted to grant org:admin scope when the
target's organization_role is admin. Creating an admin-role service
account requires an interactive credential (a user OAuth token or a
Console session) — a workload may only create developer-role service
accounts.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
name: stringSlug identifier (lowercase, digits, hyphens). Unique within the organization; a duplicate name returns 409.
maxLength: 255, minLength: 1
-
description: optional string or nullOptional free-text description.
maxLength: 2000
-
organization_role: optional "admin" or "developer"Org-level role. Defaults to
developer.-
"admin" -
"developer"
-
Returns
-
BetaServiceAccount objectNamed non-human identity within the caller's organization.
A service account is a pure identity: name + org. Authorization lives on whatever references it (federation rules).
-
type: "service_account"default: service_account
-
id: stringTagged ID of the service account.
-
archived_at: string or nullIf set, this service account is archived.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this service account. -
created_at: stringWhen this service account was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this service account. -
description: string or nullOptional free-text description.
-
name: stringAdmin-chosen slug identifier.
-
organization_role: "admin" or "developer"Org-level role. A federation rule may only be created or retargeted to grant
org:adminscope when this isadmin. A rule grantingorg:adminwhose target is later demoted todeveloperis rejected at token exchange. Rules grantingorg:adminare managed in the Console.-
"admin" -
"developer"
-
-
updated_at: stringWhen this service account was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this service account.
-
Example
curl https://api.anthropic.com/v1/organizations/service_accounts \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"name": "ci-deploy-bot"
}'Response (200)
{
"id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"name": "ci-deploy-bot",
"organization_role": "admin",
"type": "service_account",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}List Service Accounts
GET /v1/organizations/service_accounts
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
List service accounts in the caller's organization.
Results are ordered by creation time, newest first. Use limit and the
next_page cursor to paginate; set include_archived=true to include
archived service accounts.
Query parameters
-
include_archived: optional booleanInclude archived resources. Defaults to false.
default: false
-
limit: optional numberNumber of results per page.
default: 20, maximum: 100, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_page.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
data: array of BetaServiceAccount-
type: "service_account"default: service_account
-
id: stringTagged ID of the service account.
-
archived_at: string or nullIf set, this service account is archived.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this service account. -
created_at: stringWhen this service account was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this service account. -
description: string or nullOptional free-text description.
-
name: stringAdmin-chosen slug identifier.
-
organization_role: "admin" or "developer"Org-level role. A federation rule may only be created or retargeted to grant
org:adminscope when this isadmin. A rule grantingorg:adminwhose target is later demoted todeveloperis rejected at token exchange. Rules grantingorg:adminare managed in the Console.-
"admin" -
"developer"
-
-
updated_at: stringWhen this service account was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this service account.
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results.
Example
curl https://api.anthropic.com/v1/organizations/service_accounts \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"name": "ci-deploy-bot",
"organization_role": "admin",
"type": "service_account",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}
],
"next_page": "next_page"
}Get Service Account
GET /v1/organizations/service_accounts/{service_account_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Retrieve a service account by its ID (svac_...).
Path parameters
-
service_account_id: stringID of the service account.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaServiceAccount objectNamed non-human identity within the caller's organization.
A service account is a pure identity: name + org. Authorization lives on whatever references it (federation rules).
-
type: "service_account"default: service_account
-
id: stringTagged ID of the service account.
-
archived_at: string or nullIf set, this service account is archived.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this service account. -
created_at: stringWhen this service account was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this service account. -
description: string or nullOptional free-text description.
-
name: stringAdmin-chosen slug identifier.
-
organization_role: "admin" or "developer"Org-level role. A federation rule may only be created or retargeted to grant
org:adminscope when this isadmin. A rule grantingorg:adminwhose target is later demoted todeveloperis rejected at token exchange. Rules grantingorg:adminare managed in the Console.-
"admin" -
"developer"
-
-
updated_at: stringWhen this service account was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this service account.
-
Example
curl https://api.anthropic.com/v1/organizations/service_accounts/$SERVICE_ACCOUNT_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"name": "ci-deploy-bot",
"organization_role": "admin",
"type": "service_account",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}Update Service Account
POST /v1/organizations/service_accounts/{service_account_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Update a service account.
Only description and organization_role are mutable; name cannot be
changed. Archived service accounts cannot be updated; this returns 400.
Setting organization_role to admin (even when unchanged) requires an
interactive credential (a user OAuth token or a Console session).
Path parameters
-
service_account_id: stringID of the service account to update.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
description: optional string or nullReplaces the description. Omit to leave unchanged; send
nullto clear (the field is stored as an empty string).maxLength: 2000
-
organization_role: optional "admin" or "developer" or nullReplaces the org-level role. Omit or send
nullto leave unchanged.-
"admin" -
"developer"
-
Returns
-
BetaServiceAccount objectNamed non-human identity within the caller's organization.
A service account is a pure identity: name + org. Authorization lives on whatever references it (federation rules).
-
type: "service_account"default: service_account
-
id: stringTagged ID of the service account.
-
archived_at: string or nullIf set, this service account is archived.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this service account. -
created_at: stringWhen this service account was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this service account. -
description: string or nullOptional free-text description.
-
name: stringAdmin-chosen slug identifier.
-
organization_role: "admin" or "developer"Org-level role. A federation rule may only be created or retargeted to grant
org:adminscope when this isadmin. A rule grantingorg:adminwhose target is later demoted todeveloperis rejected at token exchange. Rules grantingorg:adminare managed in the Console.-
"admin" -
"developer"
-
-
updated_at: stringWhen this service account was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this service account.
-
Example
curl https://api.anthropic.com/v1/organizations/service_accounts/$SERVICE_ACCOUNT_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{}'Response (200)
{
"id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"name": "ci-deploy-bot",
"organization_role": "admin",
"type": "service_account",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}Archive Service Account
POST /v1/organizations/service_accounts/{service_account_id}/archive
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Archive a service account.
Idempotent; re-archiving returns the service account with its original
archived_at. Rejected with 400 if any live (non-archived) federation
rule still targets this service account, same as issuer archival; archive
those rules first or change their target to another service account.
Path parameters
-
service_account_id: stringID of the service account to archive.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaServiceAccount objectNamed non-human identity within the caller's organization.
A service account is a pure identity: name + org. Authorization lives on whatever references it (federation rules).
-
type: "service_account"default: service_account
-
id: stringTagged ID of the service account.
-
archived_at: string or nullIf set, this service account is archived.
format: date-time
-
archived_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that archived this service account. -
created_at: stringWhen this service account was created.
format: date-time
-
created_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that created this service account. -
description: string or nullOptional free-text description.
-
name: stringAdmin-chosen slug identifier.
-
organization_role: "admin" or "developer"Org-level role. A federation rule may only be created or retargeted to grant
org:adminscope when this isadmin. A rule grantingorg:adminwhose target is later demoted todeveloperis rejected at token exchange. Rules grantingorg:adminare managed in the Console.-
"admin" -
"developer"
-
-
updated_at: stringWhen this service account was last updated.
format: date-time
-
updated_by_actor_id: string or nullTagged ID (
user_/svac_) of the actor that last updated this service account.
-
Example
curl https://api.anthropic.com/v1/organizations/service_accounts/$SERVICE_ACCOUNT_ID/archive \
-X POST \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "svac_01SDCCSbTxrXDpWc1phhtcfK",
"archived_at": "2019-12-27T18:11:19.117Z",
"archived_by_actor_id": "archived_by_actor_id",
"created_at": "2024-10-30T23:58:27.427722Z",
"created_by_actor_id": "created_by_actor_id",
"description": "description",
"name": "ci-deploy-bot",
"organization_role": "admin",
"type": "service_account",
"updated_at": "2024-10-30T23:58:27.427722Z",
"updated_by_actor_id": "updated_by_actor_id"
}Organization › Service Accounts › Workspaces
Add Workspace To Service Account
POST /v1/organizations/service_accounts/{service_account_id}/workspaces
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Add a service account to a workspace with the given workspace_role.
Mirror of POST /workspaces/{workspace_id}/service_accounts, addressed
from the service-account side; both create the same membership. If the
service account is already an explicit member of the workspace, its
workspace_role is replaced with the value supplied here. Archived
workspaces return 400. Archived service accounts cannot be added and are
rejected.
Path parameters
-
service_account_id: stringID of the service account.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
workspace_id: stringTagged workspace ID to add the service account to.
-
workspace_role: BetaNoBillingWorkspaceRoleRole to assign to the service account in this workspace.
-
"workspace_admin" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
Returns
-
BetaServiceAccountWorkspaceMember object-
type: "service_account_workspace_member"default: service_account_workspace_member
-
created_by_actor_id: string or nullTagged ID (
user_.../svac_...) of the actor who created this membership. -
implicit: boolean or nullTrue when this is the implicit default-workspace membership every service account has when no explicit membership exists. Implicit memberships have role
workspace_userand cannot be removed. -
service_account_id: stringTagged service account ID (
svac_...). -
workspace_id: stringTagged workspace ID (
wrkspc_...). -
workspace_role: BetaWorkspaceRoleRole of the service account in this workspace. Service accounts cannot hold the
workspace_billingrole.-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
Example
curl https://api.anthropic.com/v1/organizations/service_accounts/$SERVICE_ACCOUNT_ID/workspaces \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"workspace_id": "workspace_id",
"workspace_role": "workspace_admin"
}'Response (200)
{
"created_by_actor_id": "created_by_actor_id",
"implicit": true,
"service_account_id": "service_account_id",
"type": "service_account_workspace_member",
"workspace_id": "workspace_id",
"workspace_role": "workspace_admin"
}List Workspaces For Service Account
GET /v1/organizations/service_accounts/{service_account_id}/workspaces
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
List the workspaces a service account is a member of.
Each entry includes the service account's workspace_role in that
workspace. Use limit and the next_page cursor to paginate. When the
service account has no explicit default-workspace membership, the
implicit (implicit: true) membership is returned as the first entry on
the first page; with limit=1 the first page may return up to 2 entries
(the implicit entry plus one explicit membership) so a pagination cursor
can be derived. Memberships are returned only while
the service account is active. Without a page cursor, an archived
service account returns an empty list. A page cursor that does not
match an active membership returns a 400 invalid-request error. A cursor
stops matching when the membership is removed, the workspace is deleted,
or the service account is archived. Restart pagination from the first
page to recover.
Path parameters
-
service_account_id: stringID of the service account.
Query parameters
-
limit: optional numberNumber of results per page.
default: 20, maximum: 100, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_page.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
data: array of BetaServiceAccountWorkspaceMember-
type: "service_account_workspace_member"default: service_account_workspace_member
-
created_by_actor_id: string or nullTagged ID (
user_.../svac_...) of the actor who created this membership. -
implicit: boolean or nullTrue when this is the implicit default-workspace membership every service account has when no explicit membership exists. Implicit memberships have role
workspace_userand cannot be removed. -
service_account_id: stringTagged service account ID (
svac_...). -
workspace_id: stringTagged workspace ID (
wrkspc_...). -
workspace_role: BetaWorkspaceRoleRole of the service account in this workspace. Service accounts cannot hold the
workspace_billingrole.-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results.
Example
curl https://api.anthropic.com/v1/organizations/service_accounts/$SERVICE_ACCOUNT_ID/workspaces \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"created_by_actor_id": "created_by_actor_id",
"implicit": true,
"service_account_id": "service_account_id",
"type": "service_account_workspace_member",
"workspace_id": "workspace_id",
"workspace_role": "workspace_admin"
}
],
"next_page": "next_page"
}Remove Workspace From Service Account
DELETE /v1/organizations/service_accounts/{service_account_id}/workspaces/{workspace_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Remove a service account from a workspace.
Mirror of DELETE /workspaces/{workspace_id}/service_accounts/{service_account_id},
addressed from the service-account side. Removal is idempotent (returns
200 even if the membership was already removed). A DELETE against the
implicit default-workspace membership returns 200 but is a no-op and the
membership persists; deleting an explicit default-workspace row reverts
to the implicit workspace_user membership. Archived workspaces return
400.
Path parameters
-
service_account_id: stringID of the service account.
-
workspace_id: stringID of the workspace.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
type: "service_account_workspace_member_deleted"default: service_account_workspace_member_deleted
-
service_account_id: stringTagged service account ID (
svac_...) named in the delete request. Removal is idempotent; see the endpoint description for the implicit-membership no-op. -
workspace_id: stringTagged workspace ID (
wrkspc_...) named in the delete request.
Example
curl https://api.anthropic.com/v1/organizations/service_accounts/$SERVICE_ACCOUNT_ID/workspaces/$WORKSPACE_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"service_account_id": "service_account_id",
"type": "service_account_workspace_member_deleted",
"workspace_id": "workspace_id"
}Organization › Users
List Users
GET /v1/organizations/users
List the organization's members.
Query parameters
-
after_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately after this object.
-
before_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately before this object.
-
email: optional stringFilter by user email.
format: email
-
limit: optional numberNumber of items to return per page.
Defaults to
20. Ranges from1to1000.default: 20, maximum: 1000, minimum: 1
-
roles: optional array of stringFilter to items whose
roleequals one of the supplied values. Repeatable; values are OR'ed together.Accepted values depend on the organization type: Console and API organizations accept
user,developer,billing,admin, andclaude_code_user; Claude Enterprise organizations acceptuser,owner,primary_owner,membership_admin, andmanaged.
Returns
-
data: array of BetaOrganizationUser-
type: "user"Object type.
For Users, this is always
"user".default: user
-
id: stringID of the User.
-
added_at: stringRFC 3339 datetime string indicating when the User joined the Organization.
format: date-time
-
email: stringEmail of the User.
-
name: stringName of the User.
-
role: BetaOrganizationRoleOrganization role of the User.
-
"admin" -
"billing" -
"claude_code_user" -
"developer" -
"managed" -
"membership_admin" -
"owner" -
"primary_owner" -
"user"
-
-
-
first_id: string or nullFirst ID in the
datalist. Can be used as thebefore_idfor the previous page. -
has_more: booleanIndicates if there are more results in the requested page direction.
-
last_id: string or nullLast ID in the
datalist. Can be used as theafter_idfor the next page.
Example
curl https://api.anthropic.com/v1/organizations/users \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"added_at": "2024-10-30T23:58:27.427722Z",
"email": "user@emaildomain.com",
"name": "Jane Doe",
"role": "admin",
"type": "user"
}
],
"first_id": "first_id",
"has_more": true,
"last_id": "last_id"
}Get User
GET /v1/organizations/users/{user_id}
Retrieve a member of the organization by user ID.
Path parameters
-
user_id: stringID of the User.
Returns
-
BetaOrganizationUser object-
type: "user"Object type.
For Users, this is always
"user".default: user
-
id: stringID of the User.
-
added_at: stringRFC 3339 datetime string indicating when the User joined the Organization.
format: date-time
-
email: stringEmail of the User.
-
name: stringName of the User.
-
role: BetaOrganizationRoleOrganization role of the User.
-
"admin" -
"billing" -
"claude_code_user" -
"developer" -
"managed" -
"membership_admin" -
"owner" -
"primary_owner" -
"user"
-
-
Example
curl https://api.anthropic.com/v1/organizations/users/$USER_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"added_at": "2024-10-30T23:58:27.427722Z",
"email": "user@emaildomain.com",
"name": "Jane Doe",
"role": "admin",
"type": "user"
}Update User
POST /v1/organizations/users/{user_id}
Update a member's organization role.
Path parameters
-
user_id: stringID of the User.
Body parameters
-
role: "billing" or "claude_code_user" or "developer" or 2 moreNew role for the User.
The accepted values depend on the organization type. Console and API organizations accept
user,developer,billing, andclaude_code_user;admincannot be assigned through the API. Claude Enterprise organizations acceptuserandmanaged.-
"billing" -
"claude_code_user" -
"developer" -
"managed" -
"user"
-
Returns
-
BetaOrganizationUser object-
type: "user"Object type.
For Users, this is always
"user".default: user
-
id: stringID of the User.
-
added_at: stringRFC 3339 datetime string indicating when the User joined the Organization.
format: date-time
-
email: stringEmail of the User.
-
name: stringName of the User.
-
role: BetaOrganizationRoleOrganization role of the User.
-
"admin" -
"billing" -
"claude_code_user" -
"developer" -
"managed" -
"membership_admin" -
"owner" -
"primary_owner" -
"user"
-
-
Example
curl https://api.anthropic.com/v1/organizations/users/$USER_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"role": "user"
}'Response (200)
{
"id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"added_at": "2024-10-30T23:58:27.427722Z",
"email": "user@emaildomain.com",
"name": "Jane Doe",
"role": "admin",
"type": "user"
}Remove User
DELETE /v1/organizations/users/{user_id}
Remove a member from the organization.
Path parameters
-
user_id: stringID of the User.
Returns
-
type: "user_deleted"Deleted object type.
For Users, this is always
"user_deleted".default: user_deleted
-
id: stringID of the User.
Example
curl https://api.anthropic.com/v1/organizations/users/$USER_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"type": "user_deleted"
}Organization › Workspaces
List Workspaces
GET /v1/organizations/workspaces
List Workspaces
Query parameters
-
after_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately after this object.
-
before_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately before this object.
-
include_archived: optional booleanWhether to include Workspaces that have been archived in the response
default: false
-
limit: optional numberNumber of items to return per page.
Defaults to
20. Ranges from1to1000.default: 20, maximum: 1000, minimum: 1
Returns
-
data: array of BetaWorkspace-
type: "workspace"Object type.
For Workspaces, this is always
"workspace".default: workspace
-
id: stringID of the Workspace.
-
archived_at: string or nullRFC 3339 datetime string indicating when the Workspace was archived, or
nullif the Workspace is not archived.format: date-time
-
compartment_id: stringIdentifier for this Workspace's encryption compartment. When you configure a customer-managed encryption key (CMEK) on AWS, reference this value in your KMS key-policy condition so the key is scoped to this compartment. On GCP and Azure, Anthropic enforces the compartment binding automatically; you do not need to reference this value in your key configuration. See the CMEK integration guide for the required key configuration; unless your organization is on Claude Platform on AWS, it includes a separate value used during key validation. On Claude Platform on AWS there is no separate validation value: the key is validated against this Workspace's own value when it is attached, so if your key policy uses the compartment condition, add this value to it before attaching the key.
-
created_at: stringRFC 3339 datetime string indicating when the Workspace was created.
format: date-time
-
data_residency: BetaDataResidencyData residency configuration.
-
allowed_inference_geos: array of BetaAllowedInferenceGeo or "unrestricted"Permitted inference geo values. 'unrestricted' means all geos are allowed.
-
Geos = array of BetaAllowedInferenceGeo-
"global" -
"us"
-
-
Unrestricted = "unrestricted"
-
-
default_inference_geo: "global" or "us"Default inference geo applied when requests omit the parameter.
-
"global" -
"us"
-
-
workspace_geo: "us"Geographic region for workspace data storage. Immutable after creation.
-
-
display_color: stringHex color code representing the Workspace in the Anthropic Console.
-
external_key_id: string or nullID of the customer-managed encryption key (CMEK) configuration to use for this Workspace. Setting this field requires CMEK to be enabled for your organization. When set, data stored for this Workspace is encrypted with the referenced key. Create key configurations with the External Keys API. On Claude Platform on AWS the value is the AWS KMS key ARN, and the key must be a single-Region key in the same AWS account and Region as the Workspace. On that platform the key is validated against this Workspace when it is attached, so a key-policy problem is reported as an error on this request. This field is write-once: once a key is attached to a Workspace it cannot be detached or replaced. To rotate key material, rotate the underlying key on your cloud KMS; the
external_key_idstays the same. -
name: stringName of the Workspace.
-
tags: map[string]User-defined tags as string key-value pairs. Keys may not begin with
anthropic.
-
-
first_id: string or nullFirst ID in the
datalist. Can be used as thebefore_idfor the previous page. -
has_more: booleanIndicates if there are more results in the requested page direction.
-
last_id: string or nullLast ID in the
datalist. Can be used as theafter_idfor the next page.
Example
curl https://api.anthropic.com/v1/organizations/workspaces \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ",
"archived_at": "2024-11-01T23:59:27.427722Z",
"compartment_id": "f8a7b6c5-4d3e-4f1a-8b9c-0d1e2f3a4b5c",
"created_at": "2024-10-30T23:58:27.427722Z",
"data_residency": {
"allowed_inference_geos": "unrestricted",
"default_inference_geo": "global",
"workspace_geo": "us"
},
"display_color": "#6C5BB9",
"external_key_id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"name": "Workspace Name",
"tags": {
"env": "prod",
"team": "platform"
},
"type": "workspace"
}
],
"first_id": "first_id",
"has_more": true,
"last_id": "last_id"
}Create Workspace
POST /v1/organizations/workspaces
Create Workspace
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
name: stringName of the Workspace.
maxLength: 40, minLength: 1
-
data_residency: optional BetaDataResidencyCreateConfig or nullData residency configuration for the workspace. If omitted, defaults to
workspace_geo: "us",allowed_inference_geos: "unrestricted", anddefault_inference_geo: "global".-
allowed_inference_geos: optional array of BetaAllowedInferenceGeo or "unrestricted" or nullPermitted inference geo values. Defaults to 'unrestricted' if omitted, which allows all geos. Use the string 'unrestricted' to allow all geos, or a list of specific geos.
-
Geos = array of BetaAllowedInferenceGeo-
"global" -
"us"
-
-
Unrestricted = "unrestricted"
-
-
default_inference_geo: optional "global" or "us" or nullDefault inference geo applied when requests omit the parameter. Defaults to 'global' if omitted. Must be a member of
allowed_inference_geosunlessallowed_inference_geosis"unrestricted".-
"global" -
"us"
-
-
workspace_geo: optional "us" or nullGeographic region for workspace data storage. Immutable after creation. Defaults to 'us' if omitted.
-
-
display_color: optional string or nullHex color code representing the Workspace in the Anthropic Console.
maxLength: 7, pattern: ^#[0-9A-Fa-f]{6}$
-
external_key_id: optional string or nullID of the customer-managed encryption key (CMEK) configuration to use for this Workspace. Setting this field requires CMEK to be enabled for your organization. When set, data stored for this Workspace is encrypted with the referenced key. Create key configurations with the External Keys API. On Claude Platform on AWS the value is the AWS KMS key ARN, and the key must be a single-Region key in the same AWS account and Region as the Workspace. On that platform the key is validated against this Workspace when it is attached, so a key-policy problem is reported as an error on this request. This field is write-once: once a key is attached to a Workspace it cannot be detached or replaced. To rotate key material, rotate the underlying key on your cloud KMS; the
external_key_idstays the same. -
tags: optional map[string] or nullUser-defined tags as string key-value pairs. Keys may not begin with
anthropic.
Returns
-
BetaWorkspace object-
type: "workspace"Object type.
For Workspaces, this is always
"workspace".default: workspace
-
id: stringID of the Workspace.
-
archived_at: string or nullRFC 3339 datetime string indicating when the Workspace was archived, or
nullif the Workspace is not archived.format: date-time
-
compartment_id: stringIdentifier for this Workspace's encryption compartment. When you configure a customer-managed encryption key (CMEK) on AWS, reference this value in your KMS key-policy condition so the key is scoped to this compartment. On GCP and Azure, Anthropic enforces the compartment binding automatically; you do not need to reference this value in your key configuration. See the CMEK integration guide for the required key configuration; unless your organization is on Claude Platform on AWS, it includes a separate value used during key validation. On Claude Platform on AWS there is no separate validation value: the key is validated against this Workspace's own value when it is attached, so if your key policy uses the compartment condition, add this value to it before attaching the key.
-
created_at: stringRFC 3339 datetime string indicating when the Workspace was created.
format: date-time
-
data_residency: BetaDataResidencyData residency configuration.
-
allowed_inference_geos: array of BetaAllowedInferenceGeo or "unrestricted"Permitted inference geo values. 'unrestricted' means all geos are allowed.
-
Geos = array of BetaAllowedInferenceGeo-
"global" -
"us"
-
-
Unrestricted = "unrestricted"
-
-
default_inference_geo: "global" or "us"Default inference geo applied when requests omit the parameter.
-
"global" -
"us"
-
-
workspace_geo: "us"Geographic region for workspace data storage. Immutable after creation.
-
-
display_color: stringHex color code representing the Workspace in the Anthropic Console.
-
external_key_id: string or nullID of the customer-managed encryption key (CMEK) configuration to use for this Workspace. Setting this field requires CMEK to be enabled for your organization. When set, data stored for this Workspace is encrypted with the referenced key. Create key configurations with the External Keys API. On Claude Platform on AWS the value is the AWS KMS key ARN, and the key must be a single-Region key in the same AWS account and Region as the Workspace. On that platform the key is validated against this Workspace when it is attached, so a key-policy problem is reported as an error on this request. This field is write-once: once a key is attached to a Workspace it cannot be detached or replaced. To rotate key material, rotate the underlying key on your cloud KMS; the
external_key_idstays the same. -
name: stringName of the Workspace.
-
tags: map[string]User-defined tags as string key-value pairs. Keys may not begin with
anthropic.
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"name": "x",
"display_color": "#6C5BB9",
"external_key_id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"tags": {
"env": "prod",
"team": "platform"
}
}'Response (200)
{
"id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ",
"archived_at": "2024-11-01T23:59:27.427722Z",
"compartment_id": "f8a7b6c5-4d3e-4f1a-8b9c-0d1e2f3a4b5c",
"created_at": "2024-10-30T23:58:27.427722Z",
"data_residency": {
"allowed_inference_geos": "unrestricted",
"default_inference_geo": "global",
"workspace_geo": "us"
},
"display_color": "#6C5BB9",
"external_key_id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"name": "Workspace Name",
"tags": {
"env": "prod",
"team": "platform"
},
"type": "workspace"
}Get Workspace
GET /v1/organizations/workspaces/{workspace_id}
Get Workspace
Path parameters
-
workspace_id: stringID of the Workspace.
Returns
-
BetaWorkspace object-
type: "workspace"Object type.
For Workspaces, this is always
"workspace".default: workspace
-
id: stringID of the Workspace.
-
archived_at: string or nullRFC 3339 datetime string indicating when the Workspace was archived, or
nullif the Workspace is not archived.format: date-time
-
compartment_id: stringIdentifier for this Workspace's encryption compartment. When you configure a customer-managed encryption key (CMEK) on AWS, reference this value in your KMS key-policy condition so the key is scoped to this compartment. On GCP and Azure, Anthropic enforces the compartment binding automatically; you do not need to reference this value in your key configuration. See the CMEK integration guide for the required key configuration; unless your organization is on Claude Platform on AWS, it includes a separate value used during key validation. On Claude Platform on AWS there is no separate validation value: the key is validated against this Workspace's own value when it is attached, so if your key policy uses the compartment condition, add this value to it before attaching the key.
-
created_at: stringRFC 3339 datetime string indicating when the Workspace was created.
format: date-time
-
data_residency: BetaDataResidencyData residency configuration.
-
allowed_inference_geos: array of BetaAllowedInferenceGeo or "unrestricted"Permitted inference geo values. 'unrestricted' means all geos are allowed.
-
Geos = array of BetaAllowedInferenceGeo-
"global" -
"us"
-
-
Unrestricted = "unrestricted"
-
-
default_inference_geo: "global" or "us"Default inference geo applied when requests omit the parameter.
-
"global" -
"us"
-
-
workspace_geo: "us"Geographic region for workspace data storage. Immutable after creation.
-
-
display_color: stringHex color code representing the Workspace in the Anthropic Console.
-
external_key_id: string or nullID of the customer-managed encryption key (CMEK) configuration to use for this Workspace. Setting this field requires CMEK to be enabled for your organization. When set, data stored for this Workspace is encrypted with the referenced key. Create key configurations with the External Keys API. On Claude Platform on AWS the value is the AWS KMS key ARN, and the key must be a single-Region key in the same AWS account and Region as the Workspace. On that platform the key is validated against this Workspace when it is attached, so a key-policy problem is reported as an error on this request. This field is write-once: once a key is attached to a Workspace it cannot be detached or replaced. To rotate key material, rotate the underlying key on your cloud KMS; the
external_key_idstays the same. -
name: stringName of the Workspace.
-
tags: map[string]User-defined tags as string key-value pairs. Keys may not begin with
anthropic.
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ",
"archived_at": "2024-11-01T23:59:27.427722Z",
"compartment_id": "f8a7b6c5-4d3e-4f1a-8b9c-0d1e2f3a4b5c",
"created_at": "2024-10-30T23:58:27.427722Z",
"data_residency": {
"allowed_inference_geos": "unrestricted",
"default_inference_geo": "global",
"workspace_geo": "us"
},
"display_color": "#6C5BB9",
"external_key_id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"name": "Workspace Name",
"tags": {
"env": "prod",
"team": "platform"
},
"type": "workspace"
}Update Workspace
POST /v1/organizations/workspaces/{workspace_id}
Update Workspace
Path parameters
workspace_id: string
Body parameters
-
data_residency: optional BetaDataResidencyUpdateConfig or nullData residency configuration for the workspace.
-
allowed_inference_geos: optional array of BetaAllowedInferenceGeo or "unrestricted" or nullPermitted inference geo values. Use 'unrestricted' to allow all geos, or a list of specific geos.
-
Geos = array of BetaAllowedInferenceGeo-
"global" -
"us"
-
-
Unrestricted = "unrestricted"
-
-
default_inference_geo: optional "global" or "us" or nullDefault inference geo applied when requests omit the parameter. Must be a member of
allowed_inference_geosunlessallowed_inference_geosis"unrestricted".-
"global" -
"us"
-
-
-
display_color: optional stringHex color code representing the Workspace in the Anthropic Console.
maxLength: 7, pattern: ^#[0-9A-Fa-f]{6}$
-
external_key_id: optional stringID of the customer-managed encryption key (CMEK) configuration to use for this Workspace. Setting this field requires CMEK to be enabled for your organization. When set, data stored for this Workspace is encrypted with the referenced key. Create key configurations with the External Keys API. On Claude Platform on AWS the value is the AWS KMS key ARN, and the key must be a single-Region key in the same AWS account and Region as the Workspace. On that platform the key is validated against this Workspace when it is attached, so a key-policy problem is reported as an error on this request. This field is write-once: once a key is attached to a Workspace it cannot be detached or replaced. To rotate key material, rotate the underlying key on your cloud KMS; the
external_key_idstays the same. -
name: optional stringName of the Workspace.
maxLength: 40, minLength: 1
-
tags: optional map[string] or nullUser-defined tags as string key-value pairs. Keys may not begin with
anthropic.
Returns
-
BetaWorkspace object-
type: "workspace"Object type.
For Workspaces, this is always
"workspace".default: workspace
-
id: stringID of the Workspace.
-
archived_at: string or nullRFC 3339 datetime string indicating when the Workspace was archived, or
nullif the Workspace is not archived.format: date-time
-
compartment_id: stringIdentifier for this Workspace's encryption compartment. When you configure a customer-managed encryption key (CMEK) on AWS, reference this value in your KMS key-policy condition so the key is scoped to this compartment. On GCP and Azure, Anthropic enforces the compartment binding automatically; you do not need to reference this value in your key configuration. See the CMEK integration guide for the required key configuration; unless your organization is on Claude Platform on AWS, it includes a separate value used during key validation. On Claude Platform on AWS there is no separate validation value: the key is validated against this Workspace's own value when it is attached, so if your key policy uses the compartment condition, add this value to it before attaching the key.
-
created_at: stringRFC 3339 datetime string indicating when the Workspace was created.
format: date-time
-
data_residency: BetaDataResidencyData residency configuration.
-
allowed_inference_geos: array of BetaAllowedInferenceGeo or "unrestricted"Permitted inference geo values. 'unrestricted' means all geos are allowed.
-
Geos = array of BetaAllowedInferenceGeo-
"global" -
"us"
-
-
Unrestricted = "unrestricted"
-
-
default_inference_geo: "global" or "us"Default inference geo applied when requests omit the parameter.
-
"global" -
"us"
-
-
workspace_geo: "us"Geographic region for workspace data storage. Immutable after creation.
-
-
display_color: stringHex color code representing the Workspace in the Anthropic Console.
-
external_key_id: string or nullID of the customer-managed encryption key (CMEK) configuration to use for this Workspace. Setting this field requires CMEK to be enabled for your organization. When set, data stored for this Workspace is encrypted with the referenced key. Create key configurations with the External Keys API. On Claude Platform on AWS the value is the AWS KMS key ARN, and the key must be a single-Region key in the same AWS account and Region as the Workspace. On that platform the key is validated against this Workspace when it is attached, so a key-policy problem is reported as an error on this request. This field is write-once: once a key is attached to a Workspace it cannot be detached or replaced. To rotate key material, rotate the underlying key on your cloud KMS; the
external_key_idstays the same. -
name: stringName of the Workspace.
-
tags: map[string]User-defined tags as string key-value pairs. Keys may not begin with
anthropic.
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"display_color": "#6C5BB9",
"external_key_id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"tags": {
"env": "prod",
"team": "platform"
}
}'Response (200)
{
"id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ",
"archived_at": "2024-11-01T23:59:27.427722Z",
"compartment_id": "f8a7b6c5-4d3e-4f1a-8b9c-0d1e2f3a4b5c",
"created_at": "2024-10-30T23:58:27.427722Z",
"data_residency": {
"allowed_inference_geos": "unrestricted",
"default_inference_geo": "global",
"workspace_geo": "us"
},
"display_color": "#6C5BB9",
"external_key_id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"name": "Workspace Name",
"tags": {
"env": "prod",
"team": "platform"
},
"type": "workspace"
}Archive Workspace
POST /v1/organizations/workspaces/{workspace_id}/archive
Archive Workspace
Path parameters
workspace_id: string
Returns
-
BetaWorkspace object-
type: "workspace"Object type.
For Workspaces, this is always
"workspace".default: workspace
-
id: stringID of the Workspace.
-
archived_at: string or nullRFC 3339 datetime string indicating when the Workspace was archived, or
nullif the Workspace is not archived.format: date-time
-
compartment_id: stringIdentifier for this Workspace's encryption compartment. When you configure a customer-managed encryption key (CMEK) on AWS, reference this value in your KMS key-policy condition so the key is scoped to this compartment. On GCP and Azure, Anthropic enforces the compartment binding automatically; you do not need to reference this value in your key configuration. See the CMEK integration guide for the required key configuration; unless your organization is on Claude Platform on AWS, it includes a separate value used during key validation. On Claude Platform on AWS there is no separate validation value: the key is validated against this Workspace's own value when it is attached, so if your key policy uses the compartment condition, add this value to it before attaching the key.
-
created_at: stringRFC 3339 datetime string indicating when the Workspace was created.
format: date-time
-
data_residency: BetaDataResidencyData residency configuration.
-
allowed_inference_geos: array of BetaAllowedInferenceGeo or "unrestricted"Permitted inference geo values. 'unrestricted' means all geos are allowed.
-
Geos = array of BetaAllowedInferenceGeo-
"global" -
"us"
-
-
Unrestricted = "unrestricted"
-
-
default_inference_geo: "global" or "us"Default inference geo applied when requests omit the parameter.
-
"global" -
"us"
-
-
workspace_geo: "us"Geographic region for workspace data storage. Immutable after creation.
-
-
display_color: stringHex color code representing the Workspace in the Anthropic Console.
-
external_key_id: string or nullID of the customer-managed encryption key (CMEK) configuration to use for this Workspace. Setting this field requires CMEK to be enabled for your organization. When set, data stored for this Workspace is encrypted with the referenced key. Create key configurations with the External Keys API. On Claude Platform on AWS the value is the AWS KMS key ARN, and the key must be a single-Region key in the same AWS account and Region as the Workspace. On that platform the key is validated against this Workspace when it is attached, so a key-policy problem is reported as an error on this request. This field is write-once: once a key is attached to a Workspace it cannot be detached or replaced. To rotate key material, rotate the underlying key on your cloud KMS; the
external_key_idstays the same. -
name: stringName of the Workspace.
-
tags: map[string]User-defined tags as string key-value pairs. Keys may not begin with
anthropic.
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/archive \
-X POST \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ",
"archived_at": "2024-11-01T23:59:27.427722Z",
"compartment_id": "f8a7b6c5-4d3e-4f1a-8b9c-0d1e2f3a4b5c",
"created_at": "2024-10-30T23:58:27.427722Z",
"data_residency": {
"allowed_inference_geos": "unrestricted",
"default_inference_geo": "global",
"workspace_geo": "us"
},
"display_color": "#6C5BB9",
"external_key_id": "ekey_01SDCCSbTxrXDpWc1phhtcfK",
"name": "Workspace Name",
"tags": {
"env": "prod",
"team": "platform"
},
"type": "workspace"
}Organization › Workspaces › Rate Limits
List Workspace Rate Limits
GET /v1/organizations/workspaces/{workspace_id}/rate_limits
List rate-limit overrides configured for a workspace.
Returns only the groups and limiter types that have a workspace-level
override. Groups without overrides inherit the organization limits and
are not listed; use GET /v1/organizations/rate_limits to see those.
When limit is omitted, every matching entry is returned in a single
page; when limit truncates the result, follow next_page to fetch
the remaining entries.
Path parameters
-
workspace_id: stringThe ID of the workspace.
Query parameters
-
group_type: optional "batch" or "files" or "model_group" or 3 moreFilter by group type.
-
"batch" -
"files" -
"model_group" -
"skills" -
"token_count" -
"web_search"
-
-
limit: optional numberMaximum number of items to return per page. Ranges from
1to1000.When omitted, every remaining entry is returned in a single page and
next_pageisnull.maximum: 1000, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_page.
Returns
-
data: array of BetaWorkspaceRateLimitRate-limit entries for the workspace, one per group that has at least one override.
-
type: "workspace_rate_limit"Object type. Always
workspace_rate_limitfor workspace rate-limit entries.default: workspace_rate_limit
-
group_type: "batch" or "files" or "model_group" or 3 moreThe kind of rate-limit group this entry represents.
model_groupentries apply to a family of models (listed inmodels); other values apply to an API-surface category and havemodelsset tonull.-
"batch" -
"files" -
"model_group" -
"skills" -
"token_count" -
"web_search"
-
-
limits: array of BetaWorkspaceRateLimitValueThe limiter values overridden for this group in this workspace. Limiter types without a workspace override are omitted and inherit the organization value.
-
type: stringThe limiter type (for example,
requests_per_minuteorinput_tokens_per_minute). -
org_limit: number or nullThe organization-level value for the same limiter type, for reference.
nullwhen the organization has no limit configured for this limiter type. -
value: numberThe workspace-level override value for this limiter type.
-
-
models: array of string or nullModel names this entry's limits apply to, including aliases.
nullwhengroup_typeis not"model_group". -
rate_limit_id: stringThe
idof the RateLimit group this override applies to. -
workspace_id: stringID of the Workspace this override applies to.
-
-
next_page: string or nullOpaque cursor for the next page of results, or
nullwhen no entries remain beyond this response.
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/rate_limits \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"group_type": "batch",
"limits": [
{
"org_limit": 0,
"type": "type",
"value": 0
}
],
"models": [
"string"
],
"rate_limit_id": "rate_limit_id",
"type": "workspace_rate_limit",
"workspace_id": "workspace_id"
}
],
"next_page": "next_page"
}Organization › Workspaces › Members
List Workspace Members
GET /v1/organizations/workspaces/{workspace_id}/members
List Workspace Members
Path parameters
-
workspace_id: stringID of the Workspace.
Query parameters
-
after_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately after this object.
-
before_id: optional stringID of the object to use as a cursor for pagination. When provided, returns the page of results immediately before this object.
-
limit: optional numberNumber of items to return per page.
Defaults to
20. Ranges from1to1000.default: 20, maximum: 1000, minimum: 1
Returns
-
data: array of BetaWorkspaceMember-
type: "workspace_member"Object type.
For Workspace Members, this is always
"workspace_member".default: workspace_member
-
user_id: stringID of the User.
-
workspace_id: stringID of the Workspace.
-
workspace_role: BetaWorkspaceRoleRole of the Workspace Member.
-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
-
first_id: string or nullFirst ID in the
datalist. Can be used as thebefore_idfor the previous page. -
has_more: booleanIndicates if there are more results in the requested page direction.
-
last_id: string or nullLast ID in the
datalist. Can be used as theafter_idfor the next page.
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/members \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"type": "workspace_member",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ",
"workspace_role": "workspace_admin"
}
],
"first_id": "first_id",
"has_more": true,
"last_id": "last_id"
}Create Workspace Member
POST /v1/organizations/workspaces/{workspace_id}/members
Create Workspace Member
Path parameters
-
workspace_id: stringID of the Workspace.
Body parameters
-
user_id: stringID of the User.
-
workspace_role: BetaNoBillingWorkspaceRoleRole of the new Workspace Member. Cannot be
workspace_billing.-
"workspace_admin" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
Returns
-
BetaWorkspaceMember object-
type: "workspace_member"Object type.
For Workspace Members, this is always
"workspace_member".default: workspace_member
-
user_id: stringID of the User.
-
workspace_id: stringID of the Workspace.
-
workspace_role: BetaWorkspaceRoleRole of the Workspace Member.
-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/members \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"workspace_role": "workspace_admin"
}'Response (200)
{
"type": "workspace_member",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ",
"workspace_role": "workspace_admin"
}Get Workspace Member
GET /v1/organizations/workspaces/{workspace_id}/members/{user_id}
Get Workspace Member
Path parameters
-
workspace_id: stringID of the Workspace.
-
user_id: stringID of the User.
Returns
-
BetaWorkspaceMember object-
type: "workspace_member"Object type.
For Workspace Members, this is always
"workspace_member".default: workspace_member
-
user_id: stringID of the User.
-
workspace_id: stringID of the Workspace.
-
workspace_role: BetaWorkspaceRoleRole of the Workspace Member.
-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/members/$USER_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"type": "workspace_member",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ",
"workspace_role": "workspace_admin"
}Update Workspace Member
POST /v1/organizations/workspaces/{workspace_id}/members/{user_id}
Update Workspace Member
Path parameters
-
workspace_id: stringID of the Workspace.
-
user_id: stringID of the User.
Body parameters
-
workspace_role: BetaWorkspaceRoleNew workspace role for the User.
-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
Returns
-
BetaWorkspaceMember object-
type: "workspace_member"Object type.
For Workspace Members, this is always
"workspace_member".default: workspace_member
-
user_id: stringID of the User.
-
workspace_id: stringID of the Workspace.
-
workspace_role: BetaWorkspaceRoleRole of the Workspace Member.
-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/members/$USER_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"workspace_role": "workspace_admin"
}'Response (200)
{
"type": "workspace_member",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ",
"workspace_role": "workspace_admin"
}Delete Workspace Member
DELETE /v1/organizations/workspaces/{workspace_id}/members/{user_id}
Delete Workspace Member
Path parameters
-
workspace_id: stringID of the Workspace.
-
user_id: stringID of the User.
Returns
-
type: "workspace_member_deleted"Deleted object type.
For Workspace Members, this is always
"workspace_member_deleted".default: workspace_member_deleted
-
user_id: stringID of the User.
-
workspace_id: stringID of the Workspace.
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/members/$USER_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"type": "workspace_member_deleted",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
}Organization › Workspaces › Service Accounts
List Service Account Workspace Members
GET /v1/organizations/workspaces/{workspace_id}/service_accounts
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
List the service accounts that are members of a workspace.
Each entry includes the service account's workspace_role. Use limit
and the next_page cursor to paginate. Archived workspaces return 400;
use GET /service_accounts/{id}/workspaces to audit memberships of an
archived workspace. The implicit default-workspace membership is not
included in this list. Memberships of archived service accounts are
omitted from the results.
Path parameters
-
workspace_id: stringID of the workspace.
Query parameters
-
limit: optional numberNumber of results per page.
default: 20, maximum: 100, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_page.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
data: array of BetaServiceAccountWorkspaceMember-
type: "service_account_workspace_member"default: service_account_workspace_member
-
created_by_actor_id: string or nullTagged ID (
user_.../svac_...) of the actor who created this membership. -
implicit: boolean or nullTrue when this is the implicit default-workspace membership every service account has when no explicit membership exists. Implicit memberships have role
workspace_userand cannot be removed. -
service_account_id: stringTagged service account ID (
svac_...). -
workspace_id: stringTagged workspace ID (
wrkspc_...). -
workspace_role: BetaWorkspaceRoleRole of the service account in this workspace. Service accounts cannot hold the
workspace_billingrole.-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results.
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/service_accounts \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"created_by_actor_id": "created_by_actor_id",
"implicit": true,
"service_account_id": "service_account_id",
"type": "service_account_workspace_member",
"workspace_id": "workspace_id",
"workspace_role": "workspace_admin"
}
],
"next_page": "next_page"
}Create Service Account Workspace Member
POST /v1/organizations/workspaces/{workspace_id}/service_accounts
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Add a service account to a workspace with the given workspace_role.
The role determines what the service account can do in the workspace and
which workspace-scoped permissions it can be granted when authenticating
through federation. Every service account is already an implicit
workspace_user member of the default workspace; adding it explicitly
assigns a chosen role. If the service account is already an explicit
member of the workspace, its workspace_role is replaced with the
value supplied here. Archived workspaces return 400. Archived service
accounts cannot be added and are rejected.
Path parameters
-
workspace_id: stringID of the workspace.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
service_account_id: stringTagged service account ID to add.
-
workspace_role: BetaNoBillingWorkspaceRoleRole to assign to the service account in this workspace.
-
"workspace_admin" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
Returns
-
BetaServiceAccountWorkspaceMember object-
type: "service_account_workspace_member"default: service_account_workspace_member
-
created_by_actor_id: string or nullTagged ID (
user_.../svac_...) of the actor who created this membership. -
implicit: boolean or nullTrue when this is the implicit default-workspace membership every service account has when no explicit membership exists. Implicit memberships have role
workspace_userand cannot be removed. -
service_account_id: stringTagged service account ID (
svac_...). -
workspace_id: stringTagged workspace ID (
wrkspc_...). -
workspace_role: BetaWorkspaceRoleRole of the service account in this workspace. Service accounts cannot hold the
workspace_billingrole.-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/service_accounts \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"service_account_id": "service_account_id",
"workspace_role": "workspace_admin"
}'Response (200)
{
"created_by_actor_id": "created_by_actor_id",
"implicit": true,
"service_account_id": "service_account_id",
"type": "service_account_workspace_member",
"workspace_id": "workspace_id",
"workspace_role": "workspace_admin"
}Get Service Account Workspace Member
GET /v1/organizations/workspaces/{workspace_id}/service_accounts/{service_account_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Retrieve a service account's membership in a workspace.
Returns the membership record, including the service account's
workspace_role in this workspace. Archived workspaces return 400. For
the default workspace, returns the implicit (implicit: true)
membership when no explicit membership exists; an explicitly added
membership is returned with its assigned role. An archived service
account returns 404.
Path parameters
-
workspace_id: stringID of the workspace.
-
service_account_id: stringID of the service account.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaServiceAccountWorkspaceMember object-
type: "service_account_workspace_member"default: service_account_workspace_member
-
created_by_actor_id: string or nullTagged ID (
user_.../svac_...) of the actor who created this membership. -
implicit: boolean or nullTrue when this is the implicit default-workspace membership every service account has when no explicit membership exists. Implicit memberships have role
workspace_userand cannot be removed. -
service_account_id: stringTagged service account ID (
svac_...). -
workspace_id: stringTagged workspace ID (
wrkspc_...). -
workspace_role: BetaWorkspaceRoleRole of the service account in this workspace. Service accounts cannot hold the
workspace_billingrole.-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/service_accounts/$SERVICE_ACCOUNT_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"created_by_actor_id": "created_by_actor_id",
"implicit": true,
"service_account_id": "service_account_id",
"type": "service_account_workspace_member",
"workspace_id": "workspace_id",
"workspace_role": "workspace_admin"
}Update Service Account Workspace Member
POST /v1/organizations/workspaces/{workspace_id}/service_accounts/{service_account_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Change a service account's role in a workspace.
The new workspace_role replaces the current one. Only explicit
memberships can be updated; to set a role on the implicit
default-workspace membership, add the service account explicitly with
POST /workspaces/{workspace_id}/service_accounts. Archived workspaces
return 400. Archived service accounts cannot be updated and are
rejected.
Path parameters
-
workspace_id: stringID of the workspace.
-
service_account_id: stringID of the service account.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
workspace_role: BetaNoBillingWorkspaceRoleNew role for the service account in this workspace.
-
"workspace_admin" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
Returns
-
BetaServiceAccountWorkspaceMember object-
type: "service_account_workspace_member"default: service_account_workspace_member
-
created_by_actor_id: string or nullTagged ID (
user_.../svac_...) of the actor who created this membership. -
implicit: boolean or nullTrue when this is the implicit default-workspace membership every service account has when no explicit membership exists. Implicit memberships have role
workspace_userand cannot be removed. -
service_account_id: stringTagged service account ID (
svac_...). -
workspace_id: stringTagged workspace ID (
wrkspc_...). -
workspace_role: BetaWorkspaceRoleRole of the service account in this workspace. Service accounts cannot hold the
workspace_billingrole.-
"workspace_admin" -
"workspace_billing" -
"workspace_developer" -
"workspace_restricted_developer" -
"workspace_user"
-
-
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/service_accounts/$SERVICE_ACCOUNT_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"workspace_role": "workspace_admin"
}'Response (200)
{
"created_by_actor_id": "created_by_actor_id",
"implicit": true,
"service_account_id": "service_account_id",
"type": "service_account_workspace_member",
"workspace_id": "workspace_id",
"workspace_role": "workspace_admin"
}Delete Service Account Workspace Member
DELETE /v1/organizations/workspaces/{workspace_id}/service_accounts/{service_account_id}
Requires an OAuth access token with the org:admin scope, from ant auth login --scope org:admin or a workload identity federation rule; Admin API keys are not accepted. See Manage WIF with the Admin API.
Remove a service account from a workspace.
Removal is idempotent (returns 200 even if the membership was already
removed). A DELETE against the implicit default-workspace membership
returns 200 but is a no-op and the membership persists; deleting an
explicit default-workspace row reverts to the implicit workspace_user
membership. Archived workspaces return 400.
Path parameters
-
workspace_id: stringID of the workspace.
-
service_account_id: stringID of the service account.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
type: "service_account_workspace_member_deleted"default: service_account_workspace_member_deleted
-
service_account_id: stringTagged service account ID (
svac_...) named in the delete request. Removal is idempotent; see the endpoint description for the implicit-membership no-op. -
workspace_id: stringTagged workspace ID (
wrkspc_...) named in the delete request.
Example
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/service_accounts/$SERVICE_ACCOUNT_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"service_account_id": "service_account_id",
"type": "service_account_workspace_member_deleted",
"workspace_id": "workspace_id"
}Organization › Rate Limits
List Organization Rate Limits
GET /v1/organizations/rate_limits
List Messages API rate limits for your organization.
Each entry corresponds to one rate-limit group (either a model family or an API-surface category such as the Files API or Message Batches) and contains the set of limiter values that apply to it.
When limit is omitted, every matching entry is returned in a single
page; when limit truncates the result, follow next_page to fetch
the remaining entries.
Query parameters
-
group_type: optional "batch" or "files" or "model_group" or 3 moreFilter by group type.
-
"batch" -
"files" -
"model_group" -
"skills" -
"token_count" -
"web_search"
-
-
limit: optional numberMaximum number of items to return per page. Ranges from
1to1000.When omitted, every remaining entry is returned in a single page and
next_pageisnull.maximum: 1000, minimum: 1
-
model: optional stringFilter to the single entry containing this model. Accepts full model names and aliases. Returns 404 if the model is not found or has no rate limits for this organization.
-
page: optional stringOpaque cursor from a previous response's
next_page.
Returns
-
data: array of BetaOrganizationRateLimitRate-limit entries for the organization, one per group.
-
type: "rate_limit"Object type. Always
rate_limitfor organization rate-limit entries.default: rate_limit
-
id: stringStable identifier for this rate-limit group within the organization.
-
group_type: "batch" or "files" or "model_group" or 3 moreThe kind of rate-limit group this entry represents.
model_groupentries apply to a family of models (listed inmodels); other values apply to an API-surface category and havemodelsset tonull.-
"batch" -
"files" -
"model_group" -
"skills" -
"token_count" -
"web_search"
-
-
limits: array of BetaOrganizationRateLimitValueThe limiter values that apply to this group.
-
type: stringThe limiter type (for example,
requests_per_minuteorinput_tokens_per_minute). -
value: numberThe configured limit value for this limiter type.
-
-
models: array of string or nullModel names this entry's limits apply to, including aliases.
nullwhengroup_typeis not"model_group".
-
-
next_page: string or nullOpaque cursor for the next page of results, or
nullwhen no entries remain beyond this response.
Example
curl https://api.anthropic.com/v1/organizations/rate_limits \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "id",
"group_type": "batch",
"limits": [
{
"type": "type",
"value": 0
}
],
"models": [
"string"
],
"type": "rate_limit"
}
],
"next_page": "next_page"
}Organization › Compliance Settings
Get Compliance Settings
GET /v1/organizations/compliance_settings
Retrieve your organization's Compliance Settings.
Compliance Settings is a singleton resource: there is exactly one per
organization, addressed without an identifier. The state field reflects
whether the Compliance API is enabled. An organization with a parent
organization reads the state inherited from the parent's configuration.
Returns
-
BetaComplianceSettings object-
type: "compliance_settings"default: compliance_settings
-
state: BetaComplianceSettingsStateWhether the Compliance API is enabled for this organization.
-
BetaComplianceSettingsStateEnabled object-
type: "enabled"default: enabled
-
-
BetaComplianceSettingsStateDisabled object-
type: "disabled"default: disabled
-
-
-
Example
curl https://api.anthropic.com/v1/organizations/compliance_settings \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"state": {
"type": "enabled"
},
"type": "compliance_settings"
}Update Compliance Settings
POST /v1/organizations/compliance_settings
Update your organization's Compliance Settings.
Setting state to enabled turns on the Compliance API and begins
capturing organization activity events. Setting it to disabled turns
both off. state reflects whether the Compliance API is enabled.
A request that sets state to its current value succeeds and leaves the
resource unchanged. A disabled request stays in effect until a later
enabled request or the organization's next provisioning action that
enables Access Transparency: enabling Access Transparency also enables
the Compliance API, which serves its activity events, so such
provisioning (including re-runs) re-enables the Compliance API even
after a disabled request. Automated provisioning never disables
compliance settings.
Body parameters
-
state: BetaComplianceSettingsStateParamDesired state. Accepts the string shorthand "enabled" or "disabled" in place of the object form; the response always returns the canonical object form.
-
BetaComplianceSettingsStateEnabledParam objecttype: "enabled"
-
BetaComplianceSettingsStateDisabledParam objecttype: "disabled"
-
Returns
-
BetaComplianceSettings object-
type: "compliance_settings"default: compliance_settings
-
state: BetaComplianceSettingsStateWhether the Compliance API is enabled for this organization.
-
BetaComplianceSettingsStateEnabled object-
type: "enabled"default: enabled
-
-
BetaComplianceSettingsStateDisabled object-
type: "disabled"default: disabled
-
-
-
Example
curl https://api.anthropic.com/v1/organizations/compliance_settings \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"state": {
"type": "enabled"
}
}'Response (200)
{
"state": {
"type": "enabled"
},
"type": "compliance_settings"
}Organization › Usage Report
Get Messages Usage Report
GET /v1/organizations/usage_report/messages
Get Messages Usage Report
Query parameters
-
starting_at: stringTime buckets that start on or after this RFC 3339 timestamp will be returned. Each time bucket will be snapped to the start of the minute/hour/day in UTC.
format: date-time
-
account_ids: optional array of stringRestrict usage returned to the specified user account ID(s).
-
api_key_ids: optional array of stringRestrict usage returned to the specified API key ID(s).
-
bucket_width: optional "1d" or "1h" or "1m"Time granularity of the response data.
default: 1d
-
"1d" -
"1h" -
"1m"
-
-
context_window: optional array of "0-200k" or "200k-1M"Restrict usage returned to the specified context window(s).
-
"0-200k" -
"200k-1M"
-
-
ending_at: optional stringTime buckets that end before this RFC 3339 timestamp will be returned.
format: date-time
-
group_by: optional array of "account_id" or "api_key_id" or "context_window" or 6 moreGroup by any subset of the available options. Grouping by
speedrequires thefast-mode-2026-02-01beta header.-
"account_id" -
"api_key_id" -
"context_window" -
"inference_geo" -
"model" -
"service_account_id" -
"service_tier" -
"speed" -
"workspace_id"
-
-
inference_geos: optional array of "global" or "not_available" or "us"Restrict usage returned to the specified inference geo(s). Use
not_availablefor models that do not support specifyinginference_geo.-
"global" -
"not_available" -
"us"
-
-
limit: optional numberMaximum number of time buckets to return in the response.
The default and max limits depend on
bucket_width: •"1d": Default of 7 days, maximum of 31 days •"1h": Default of 24 hours, maximum of 168 hours •"1m": Default of 60 minutes, maximum of 1440 minutes -
models: optional array of stringRestrict usage returned to the specified model(s).
-
page: optional stringOptionally set to the
next_pagetoken from the previous response. -
service_account_ids: optional array of stringRestrict usage returned to the specified service account ID(s).
-
service_tiers: optional array of "batch" or "flex" or "flex_discount" or 3 moreRestrict usage returned to the specified service tier(s).
-
"batch" -
"flex" -
"flex_discount" -
"priority" -
"priority_on_demand" -
"standard"
-
-
speeds: optional array of "standard" or "fast"Restrict usage returned to the specified speed(s) (Claude Code research preview). Requires the
fast-mode-2026-02-01beta header.-
"standard" -
"fast"
-
-
workspace_ids: optional array of stringRestrict usage returned to the specified workspace ID(s).
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaMessagesUsageReport object-
data: array of objectList of time buckets for this page, oldest first: one per
bucket_widthinterval, including intervals with no usage (theirresultslist is empty). A page holds at mostlimitbuckets.-
ending_at: stringEnd of the time bucket (exclusive) in RFC 3339 format.
format: date-time
-
results: array of objectList of usage items for this time bucket. There may be multiple items if one or more
group_by[]parameters are specified.-
account_id: string or nullID of the user account that made the request.
nullif not grouping by account or for non-OAuth requests. -
api_key_id: string or nullID of the API key used.
nullif not grouping by API key or for usage in the Anthropic Console. -
cache_creation: BetaCacheCreationThe number of input tokens for cache creation.
-
ephemeral_1h_input_tokens: numberThe number of input tokens used to create the 1 hour cache entry.
default: 0, minimum: 0
-
ephemeral_5m_input_tokens: numberThe number of input tokens used to create the 5 minute cache entry.
default: 0, minimum: 0
-
-
cache_read_input_tokens: numberThe number of input tokens read from the cache.
-
context_window: "0-200k" or "200k-1M" or nullContext window used.
nullif not grouping by context window.-
"0-200k" -
"200k-1M"
-
-
inference_geo: "global" or "not_available" or "us" or nullInference geo used matching requests'
inference_geoparameter if set, otherwise the workspace'sdefault_inference_geo. For models that do not support specifyinginference_geothe value is"not_available". Alwaysnullif not grouping by inference geo.-
"global" -
"not_available" -
"us"
-
-
model: string or nullModel used.
nullif not grouping by model. -
output_tokens: numberThe number of output tokens generated.
-
server_tool_use: objectServer-side tool usage metrics.
-
web_search_requests: numberThe number of web search requests made.
-
-
service_account_id: string or nullID of the service account that made the request.
nullif not grouping by service account or for non-OIDC-federation requests. -
service_tier: "batch" or "flex" or "flex_discount" or 3 more or nullService tier used.
nullif not grouping by service tier.-
"batch" -
"flex" -
"flex_discount" -
"priority" -
"priority_on_demand" -
"standard"
-
-
uncached_input_tokens: numberThe number of uncached input tokens processed.
-
workspace_id: string or nullID of the Workspace used.
nullif not grouping by workspace or for the default workspace.
-
-
starting_at: stringStart of the time bucket (inclusive) in RFC 3339 format.
format: date-time
-
-
has_more: booleanIndicates if there are more results.
-
next_page: string or nullOpaque cursor for the next page, or
nullwhenhas_moreis false. Pass it as thepageparameter in the next request.
-
Example
curl https://api.anthropic.com/v1/organizations/usage_report/messages \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"ending_at": "2025-08-02T00:00:00Z",
"results": [
{
"account_id": "user_01WCz1FkmYMm4gnmykNKUu3Q",
"api_key_id": "apikey_01Rj2N8SVvo6BePZj99NhmiT",
"cache_creation": {
"ephemeral_1h_input_tokens": 0,
"ephemeral_5m_input_tokens": 0
},
"cache_read_input_tokens": 200,
"context_window": "0-200k",
"inference_geo": "global",
"model": "claude-opus-5",
"output_tokens": 500,
"server_tool_use": {
"web_search_requests": 10
},
"service_account_id": "svac_01Hk3R9TWxq7CfQak00OiVw4",
"service_tier": "standard",
"uncached_input_tokens": 1500,
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
}
],
"starting_at": "2025-08-01T00:00:00Z"
}
],
"has_more": true,
"next_page": "page_MjAyNS0wNS0xNFQwMDowMDowMFo="
}Get Claude Code Usage Report
GET /v1/organizations/usage_report/claude_code
Retrieve daily aggregated usage metrics for Claude Code users. Enables organizations to analyze developer productivity and build custom dashboards.
Query parameters
-
starting_at: stringUTC date in YYYY-MM-DD format. Returns metrics for this single day only.
pattern: ^\d{4}-\d{2}-\d{2}$, format: date
-
limit: optional numberNumber of records per page (default: 20, max: 1000).
default: 20, maximum: 1000, minimum: 1
-
page: optional stringOpaque cursor token from previous response's
next_pagefield.
Returns
-
BetaClaudeCodeUsageReport object-
data: array of objectList of Claude Code usage records for the requested date.
-
actor: UserActor or APIActorThe user or API key that performed the Claude Code actions.
-
UserActor object-
type: "user_actor"Actor type. Always
"user_actor"for a user. -
email_address: stringEmail address of the user who performed Claude Code actions.
-
-
APIActor object-
type: "api_actor"Actor type. Always
"api_actor"for an API key. -
api_key_name: stringName of the API key used to perform Claude Code actions.
-
-
-
core_metrics: objectCore productivity metrics measuring Claude Code usage and impact.
-
commits_by_claude_code: numberNumber of git commits created through Claude Code's commit functionality.
-
lines_of_code: objectStatistics on code changes made through Claude Code.
-
added: numberTotal number of lines of code added across all files by Claude Code.
-
removed: numberTotal number of lines of code removed across all files by Claude Code.
-
-
num_sessions: numberNumber of distinct Claude Code sessions initiated by this actor.
-
pull_requests_by_claude_code: numberNumber of pull requests created through Claude Code's PR functionality.
-
-
customer_type: "api" or "subscription"Type of customer account (api for API customers, subscription for Pro/Team customers).
-
"api" -
"subscription"
-
-
date: stringUTC day the usage metrics cover, as an RFC 3339 timestamp at midnight UTC (for example
2025-08-08T00:00:00Z).format: date-time
-
is_remote: booleanWhether the usage came from remote Claude Code sessions, such as Claude Code on the web. Remote and local usage are reported as separate rows.
-
model_breakdown: array of objectToken usage and cost breakdown by AI model used.
-
estimated_cost: objectEstimated cost for using this model
-
amount: numberEstimated cost amount in minor currency units (e.g., cents for USD).
-
currency: stringCurrency code for the estimated cost (e.g., 'USD').
-
-
model: stringName of the AI model used for Claude Code interactions.
-
tokens: objectToken usage breakdown for this model
-
cache_creation: numberNumber of cache creation tokens consumed by this model.
-
cache_read: numberNumber of cache read tokens consumed by this model.
-
input: numberNumber of input tokens consumed by this model.
-
output: numberNumber of output tokens generated by this model.
-
-
-
organization_id: stringID of the organization that owns the Claude Code usage.
-
terminal_type: stringType of terminal or environment where Claude Code was used.
-
tool_actions: map[object]Breakdown of tool action acceptance and rejection rates by tool type.
-
accepted: numberNumber of tool action proposals that the user accepted.
-
rejected: numberNumber of tool action proposals that the user rejected.
-
-
subscription_type: optional "enterprise" or "team" or nullSubscription tier for subscription customers.
nullfor API customers.-
"enterprise" -
"team"
-
-
-
has_more: booleanTrue if there are more records available beyond the current page.
-
next_page: string or nullOpaque cursor token for fetching the next page of results, or null if no more pages are available.
-
Example
curl https://api.anthropic.com/v1/organizations/usage_report/claude_code \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"actor": {
"email_address": "user@emaildomain.com",
"type": "user_actor"
},
"core_metrics": {
"commits_by_claude_code": 8,
"lines_of_code": {
"added": 342,
"removed": 128
},
"num_sessions": 15,
"pull_requests_by_claude_code": 2
},
"customer_type": "api",
"date": "2025-08-08T00:00:00Z",
"is_remote": false,
"model_breakdown": [
{
"estimated_cost": {
"amount": 186,
"currency": "USD"
},
"model": "claude-opus-5",
"tokens": {
"cache_creation": 2340,
"cache_read": 8790,
"input": 45230,
"output": 12450
}
},
{
"estimated_cost": {
"amount": 42,
"currency": "USD"
},
"model": "claude-sonnet-5",
"tokens": {
"cache_creation": 890,
"cache_read": 3420,
"input": 23100,
"output": 5680
}
}
],
"organization_id": "12345678-1234-5678-1234-567812345678",
"terminal_type": "iTerm.app",
"tool_actions": {
"edit_tool": {
"accepted": 25,
"rejected": 3
},
"multi_edit_tool": {
"accepted": 12,
"rejected": 1
},
"notebook_edit_tool": {
"accepted": 5,
"rejected": 2
},
"write_tool": {
"accepted": 8,
"rejected": 0
}
},
"subscription_type": "enterprise"
}
],
"has_more": true,
"next_page": "page_MjAyNS0wNS0xNFQwMDowMDowMFo="
}Organization › Cost Report
Get Cost Report
GET /v1/organizations/cost_report
Get Cost Report
Query parameters
-
starting_at: stringTime buckets that start on or after this RFC 3339 timestamp will be returned. Each time bucket will be snapped to the start of the minute/hour/day in UTC.
format: date-time
-
bucket_width: optional "1d"Time granularity of the response data.
default: 1d
-
ending_at: optional stringTime buckets that end before this RFC 3339 timestamp will be returned.
format: date-time
-
group_by: optional array of "description" or "workspace_id"Group by any subset of the available options.
-
"description" -
"workspace_id"
-
-
limit: optional numberMaximum number of time buckets to return in the response.
default: 7, maximum: 31, minimum: 1
-
page: optional stringOptionally set to the
next_pagetoken from the previous response.
Headers
-
"anthropic-beta": optional array of AnthropicBetaOptional header to specify the beta version(s) you want to use.
-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaCostReport object-
data: array of objectList of time buckets for this page, oldest first: one per
bucket_widthinterval, including intervals with no costs (theirresultslist is empty). A page holds at mostlimitbuckets.-
ending_at: stringEnd of the time bucket (exclusive) in RFC 3339 format.
format: date-time
-
results: array of objectList of cost items for this time bucket. There may be multiple items if one or more
group_by[]parameters are specified.-
amount: stringCost amount in lowest currency units (e.g. cents) as a decimal string. For example,
"123.45"in"USD"represents$1.23. -
context_window: "0-200k" or "200k-1M" or nullInput context window used.
nullif not grouping by description or for non-token costs.-
"0-200k" -
"200k-1M"
-
-
cost_type: "code_execution" or "session_usage" or "tokens" or "web_search" or nullType of cost.
nullif not grouping by description.-
"code_execution" -
"session_usage" -
"tokens" -
"web_search"
-
-
currency: stringCurrency code for the cost amount. Currently always
"USD". -
description: string or nullDescription of the cost item.
nullif not grouping by description. -
inference_geo: "global" or "not_available" or "us" or nullInference geo used matching requests'
inference_geoparameter if set, otherwise the workspace'sdefault_inference_geo. For models that do not support specifyinginference_geothe value is"not_available". Alwaysnullif not grouping by inference geo.-
"global" -
"not_available" -
"us"
-
-
model: string or nullModel name used.
nullif not grouping by description or for non-token costs. -
service_tier: "batch" or "standard" or nullService tier used.
nullif not grouping by description or for non-token costs.-
"batch" -
"standard"
-
-
token_type: "cache_creation.ephemeral_1h_input_tokens" or "cache_creation.ephemeral_5m_input_tokens" or "cache_read_input_tokens" or 2 more or nullType of token.
nullif not grouping by description or for non-token costs.-
"cache_creation.ephemeral_1h_input_tokens" -
"cache_creation.ephemeral_5m_input_tokens" -
"cache_read_input_tokens" -
"output_tokens" -
"uncached_input_tokens"
-
-
workspace_id: string or nullID of the Workspace this cost is associated with.
nullif not grouping by workspace or for the default workspace.
-
-
starting_at: stringStart of the time bucket (inclusive) in RFC 3339 format.
format: date-time
-
-
has_more: booleanIndicates if there are more results.
-
next_page: string or nullOpaque cursor for the next page, or
nullwhenhas_moreis false. Pass it as thepageparameter in the next request.
-
Example
curl https://api.anthropic.com/v1/organizations/cost_report \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"ending_at": "2025-08-02T00:00:00Z",
"results": [
{
"amount": "123.78912",
"context_window": "0-200k",
"cost_type": "tokens",
"currency": "USD",
"description": "Claude Opus 5 Usage - Input Tokens",
"inference_geo": "global",
"model": "claude-opus-5",
"service_tier": "standard",
"token_type": "uncached_input_tokens",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
}
],
"starting_at": "2025-08-01T00:00:00Z"
}
],
"has_more": true,
"next_page": "page_MjAyNS0wNS0xNFQwMDowMDowMFo="
}Organization › MCP Tunnels
List Tunnels
GET /v1/organizations/tunnels
Deprecated
Deprecated. This Admin API endpoint is superseded by /v1/tunnels on the Claude API and will be removed after a migration window. New integrations should use /v1/tunnels with the anthropic-beta: mcp-tunnels-2026-06-22 header and a WIF token carrying the workspace:manage_tunnels scope. Existing integrations continue to work with the mcp-tunnels-2026-05-19 header and org:manage_tunnels scope during the migration window.
List the organization's tunnels.
Results span the caller's organization, ordered by creation time
(newest first). Use workspace_id to filter to a single workspace;
archived tunnels are excluded unless include_archived is set.
Query parameters
-
include_archived: optional booleanInclude archived tunnels in the results. Archived tunnels are excluded by default.
default: false
-
limit: optional numberMaximum number of tunnels to return in a single page.
default: 20, maximum: 1000, minimum: 1
-
page: optional stringOpaque pagination cursor from a previous response's
next_page. Omit to fetch the first page. -
workspace_id: optional stringReturn only tunnels in this Workspace. Accepts a
wrkspc_-prefixed Workspace ID; omit to list tunnels across all Workspaces.
Headers
-
"anthropic-beta": array of AnthropicBetaThis endpoint is in beta: requests must send
mcp-tunnels-2026-05-19in this header.-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
data: array of BetaOrganizationTunnel-
type: "tunnel"Object type. Always
tunnelfor Tunnels.default: tunnel
-
id: stringID of the Tunnel.
-
archived_at: string or nullRFC 3339 datetime string indicating when the Tunnel was archived, or
nullif it is not archived.format: date-time
-
created_at: stringRFC 3339 datetime string indicating when the Tunnel was created.
format: date-time
-
display_name: string or nullHuman-readable name for the Tunnel (1–255 characters), or
nullif unset. -
domain: stringAnthropic-assigned hostname for the Tunnel. MCP server URLs whose host is a subdomain of this value are routed through the Tunnel. Globally unique and never reused, even after the Tunnel is archived.
-
workspace_id: string or nullID of the Workspace this Tunnel belongs to, or
nullfor the default Workspace. Immutable after creation.
-
-
next_page: string or nullOpaque cursor for the next page, or
nullif there are no more results.
Example
curl https://api.anthropic.com/v1/organizations/tunnels \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: mcp-tunnels-2026-05-19' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "tnl_01Hx9Kp2RtQvMn3sWbYdLcF8",
"archived_at": "2024-11-01T23:59:27.427722Z",
"created_at": "2024-10-30T23:58:27.427722Z",
"display_name": "Production",
"domain": "a1b2c3d4.tunnel.anthropic.com",
"type": "tunnel",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
}
],
"next_page": "page_MjAyNS0wNS0xNFQwMDowMDowMFo="
}Get Tunnel
GET /v1/organizations/tunnels/{tunnel_id}
Deprecated
Deprecated. This Admin API endpoint is superseded by /v1/tunnels on the Claude API and will be removed after a migration window. New integrations should use /v1/tunnels with the anthropic-beta: mcp-tunnels-2026-06-22 header and a WIF token carrying the workspace:manage_tunnels scope. Existing integrations continue to work with the mcp-tunnels-2026-05-19 header and org:manage_tunnels scope during the migration window.
Retrieve a single tunnel in the caller's organization by ID.
Path parameters
-
tunnel_id: stringID of the Tunnel.
Headers
-
"anthropic-beta": array of AnthropicBetaThis endpoint is in beta: requests must send
mcp-tunnels-2026-05-19in this header.-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaOrganizationTunnel object-
type: "tunnel"Object type. Always
tunnelfor Tunnels.default: tunnel
-
id: stringID of the Tunnel.
-
archived_at: string or nullRFC 3339 datetime string indicating when the Tunnel was archived, or
nullif it is not archived.format: date-time
-
created_at: stringRFC 3339 datetime string indicating when the Tunnel was created.
format: date-time
-
display_name: string or nullHuman-readable name for the Tunnel (1–255 characters), or
nullif unset. -
domain: stringAnthropic-assigned hostname for the Tunnel. MCP server URLs whose host is a subdomain of this value are routed through the Tunnel. Globally unique and never reused, even after the Tunnel is archived.
-
workspace_id: string or nullID of the Workspace this Tunnel belongs to, or
nullfor the default Workspace. Immutable after creation.
-
Example
curl https://api.anthropic.com/v1/organizations/tunnels/$TUNNEL_ID \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: mcp-tunnels-2026-05-19' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "tnl_01Hx9Kp2RtQvMn3sWbYdLcF8",
"archived_at": "2024-11-01T23:59:27.427722Z",
"created_at": "2024-10-30T23:58:27.427722Z",
"display_name": "Production",
"domain": "a1b2c3d4.tunnel.anthropic.com",
"type": "tunnel",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
}Archive Tunnel
POST /v1/organizations/tunnels/{tunnel_id}/archive
Deprecated
Deprecated. This Admin API endpoint is superseded by /v1/tunnels on the Claude API and will be removed after a migration window. New integrations should use /v1/tunnels with the anthropic-beta: mcp-tunnels-2026-06-22 header and a WIF token carrying the workspace:manage_tunnels scope. Existing integrations continue to work with the mcp-tunnels-2026-05-19 header and org:manage_tunnels scope during the migration window.
Archive a tunnel. Archival is irreversible.
Every non-archived certificate on the tunnel is archived in the same operation, the hostname is retired and never re-allocated, and the tunnel token is invalidated. Retrying against an already-archived tunnel returns the existing record unchanged.
Path parameters
-
tunnel_id: stringID of the Tunnel.
Headers
-
"anthropic-beta": array of AnthropicBetaThis endpoint is in beta: requests must send
mcp-tunnels-2026-05-19in this header.-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaOrganizationTunnel object-
type: "tunnel"Object type. Always
tunnelfor Tunnels.default: tunnel
-
id: stringID of the Tunnel.
-
archived_at: string or nullRFC 3339 datetime string indicating when the Tunnel was archived, or
nullif it is not archived.format: date-time
-
created_at: stringRFC 3339 datetime string indicating when the Tunnel was created.
format: date-time
-
display_name: string or nullHuman-readable name for the Tunnel (1–255 characters), or
nullif unset. -
domain: stringAnthropic-assigned hostname for the Tunnel. MCP server URLs whose host is a subdomain of this value are routed through the Tunnel. Globally unique and never reused, even after the Tunnel is archived.
-
workspace_id: string or nullID of the Workspace this Tunnel belongs to, or
nullfor the default Workspace. Immutable after creation.
-
Example
curl https://api.anthropic.com/v1/organizations/tunnels/$TUNNEL_ID/archive \
-X POST \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: mcp-tunnels-2026-05-19' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "tnl_01Hx9Kp2RtQvMn3sWbYdLcF8",
"archived_at": "2024-11-01T23:59:27.427722Z",
"created_at": "2024-10-30T23:58:27.427722Z",
"display_name": "Production",
"domain": "a1b2c3d4.tunnel.anthropic.com",
"type": "tunnel",
"workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
}Reveal Tunnel Token
POST /v1/organizations/tunnels/{tunnel_id}/reveal_token
Deprecated
Deprecated. This Admin API endpoint is superseded by /v1/tunnels on the Claude API and will be removed after a migration window. New integrations should use /v1/tunnels with the anthropic-beta: mcp-tunnels-2026-06-22 header and a WIF token carrying the workspace:manage_tunnels scope. Existing integrations continue to work with the mcp-tunnels-2026-05-19 header and org:manage_tunnels scope during the migration window.
Return the tunnel's current connection token.
The value is fetched live on each call; Anthropic does not store it.
Repeated calls return the same value until the token is rotated.
Exposed as POST so the token does not appear in intermediary
access logs.
Path parameters
-
tunnel_id: stringID of the Tunnel.
Headers
-
"anthropic-beta": array of AnthropicBetaThis endpoint is in beta: requests must send
mcp-tunnels-2026-05-19in this header.-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaOrganizationTunnelToken object-
type: "tunnel_token"Object type. Always
tunnel_tokenfor Tunnel Tokens.default: tunnel_token
-
id: stringStable identifier for the current token value. Changes when the token is rotated.
-
tunnel_token: stringThe tunnel's connection token.
-
Example
curl https://api.anthropic.com/v1/organizations/tunnels/$TUNNEL_ID/reveal_token \
-X POST \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: mcp-tunnels-2026-05-19' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "ttkn_bb97000eaec162831399ca9b6684a4fdf5be49ace5683057b017aab5c87e19e0",
"tunnel_token": "eyJhIjoiRVhBTVBMRSIsInQiOiJFWEFNUExFIiwicyI6IkVYQU1QTEUifQ==",
"type": "tunnel_token"
}Rotate Tunnel Token
POST /v1/organizations/tunnels/{tunnel_id}/rotate_token
Deprecated
Deprecated. This Admin API endpoint is superseded by /v1/tunnels on the Claude API and will be removed after a migration window. New integrations should use /v1/tunnels with the anthropic-beta: mcp-tunnels-2026-06-22 header and a WIF token carrying the workspace:manage_tunnels scope. Existing integrations continue to work with the mcp-tunnels-2026-05-19 header and org:manage_tunnels scope during the migration window.
Invalidate the tunnel's current token for new connections and return a fresh value.
Established connections are not severed by rotation; a connector
restarted after rotation must use the new value. An optional
reason is captured for operational context.
Path parameters
-
tunnel_id: stringID of the Tunnel.
Headers
-
"anthropic-beta": array of AnthropicBetaThis endpoint is in beta: requests must send
mcp-tunnels-2026-05-19in this header.-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
reason: optional string or nullOptional free-text reason for the rotation, recorded for audit.
maxLength: 1024
Returns
-
BetaOrganizationTunnelToken object-
type: "tunnel_token"Object type. Always
tunnel_tokenfor Tunnel Tokens.default: tunnel_token
-
id: stringStable identifier for the current token value. Changes when the token is rotated.
-
tunnel_token: stringThe tunnel's connection token.
-
Example
curl https://api.anthropic.com/v1/organizations/tunnels/$TUNNEL_ID/rotate_token \
-X POST \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: mcp-tunnels-2026-05-19' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "ttkn_bb97000eaec162831399ca9b6684a4fdf5be49ace5683057b017aab5c87e19e0",
"tunnel_token": "eyJhIjoiRVhBTVBMRSIsInQiOiJFWEFNUExFIiwicyI6IkVYQU1QTEUifQ==",
"type": "tunnel_token"
}Organization › MCP Tunnels › Tunnel Certificates
Create Tunnel Certificate
POST /v1/organizations/tunnels/{tunnel_id}/certificates
Deprecated
Deprecated. This Admin API endpoint is superseded by /v1/tunnels on the Claude API and will be removed after a migration window. New integrations should use /v1/tunnels with the anthropic-beta: mcp-tunnels-2026-06-22 header and a WIF token carrying the workspace:manage_tunnels scope. Existing integrations continue to work with the mcp-tunnels-2026-05-19 header and org:manage_tunnels scope during the migration window.
Register a public CA certificate for the tunnel.
Anthropic verifies the gateway's server certificate against this CA when it terminates the inner TLS session. The PEM body must contain exactly one X.509 certificate and no private-key material. A tunnel holds at most two non-archived certificates.
Path parameters
-
tunnel_id: stringID of the Tunnel.
Headers
-
"anthropic-beta": array of AnthropicBetaThis endpoint is in beta: requests must send
mcp-tunnels-2026-05-19in this header.-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Body parameters
-
ca_certificate_pem: stringPEM-encoded X.509 CA certificate. Must contain exactly one certificate and no private-key material.
maxLength: 8192
Returns
-
BetaOrganizationTunnelCertificate object-
type: "tunnel_certificate"Object type. Always
tunnel_certificatefor Tunnel Certificates.default: tunnel_certificate
-
id: stringID of the Tunnel Certificate.
-
archived_at: string or nullRFC 3339 datetime string indicating when the certificate was archived, or
nullif it is not archived.format: date-time
-
created_at: stringRFC 3339 datetime string indicating when the certificate was registered.
format: date-time
-
expires_at: string or nullRFC 3339 datetime string indicating when the certificate expires, or
nullif it does not expire.format: date-time
-
fingerprint: stringThe certificate's SHA-256 fingerprint, as a lowercase hex string.
-
tunnel_id: stringID of the Tunnel this certificate is registered against.
-
Example
curl https://api.anthropic.com/v1/organizations/tunnels/$TUNNEL_ID/certificates \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: mcp-tunnels-2026-05-19' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"ca_certificate_pem": "-----BEGIN CERTIFICATE-----\nMIIBexampleEXAMPLEexampleEXAMPLEexampleEXAMPLEexampleEXAMPLEexa\n...illustrative placeholder, not a real certificate...\n-----END CERTIFICATE-----\n"
}'Response (200)
{
"id": "tcrt_01JmWq4ZxnBvR7tKpY2sLdH9",
"archived_at": "2024-11-01T23:59:27.427722Z",
"created_at": "2024-10-30T23:58:27.427722Z",
"expires_at": "2024-10-30T23:58:27.427722Z",
"fingerprint": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"tunnel_id": "tnl_01Hx9Kp2RtQvMn3sWbYdLcF8",
"type": "tunnel_certificate"
}List Tunnel Certificates
GET /v1/organizations/tunnels/{tunnel_id}/certificates
Deprecated
Deprecated. This Admin API endpoint is superseded by /v1/tunnels on the Claude API and will be removed after a migration window. New integrations should use /v1/tunnels with the anthropic-beta: mcp-tunnels-2026-06-22 header and a WIF token carrying the workspace:manage_tunnels scope. Existing integrations continue to work with the mcp-tunnels-2026-05-19 header and org:manage_tunnels scope during the migration window.
List the certificates registered on a tunnel.
Archived certificates are excluded unless include_archived is set.
Path parameters
-
tunnel_id: stringID of the Tunnel.
Query parameters
-
include_archived: optional booleanInclude archived certificates in the results. Archived certificates are excluded by default.
default: false
-
limit: optional numberMaximum number of certificates to return.
default: 20, maximum: 1000, minimum: 1
-
page: optional stringA tunnel has at most two active certificates, so this list is not paginated.
Headers
-
"anthropic-beta": array of AnthropicBetaThis endpoint is in beta: requests must send
mcp-tunnels-2026-05-19in this header.-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
data: array of BetaOrganizationTunnelCertificate-
type: "tunnel_certificate"Object type. Always
tunnel_certificatefor Tunnel Certificates.default: tunnel_certificate
-
id: stringID of the Tunnel Certificate.
-
archived_at: string or nullRFC 3339 datetime string indicating when the certificate was archived, or
nullif it is not archived.format: date-time
-
created_at: stringRFC 3339 datetime string indicating when the certificate was registered.
format: date-time
-
expires_at: string or nullRFC 3339 datetime string indicating when the certificate expires, or
nullif it does not expire.format: date-time
-
fingerprint: stringThe certificate's SHA-256 fingerprint, as a lowercase hex string.
-
tunnel_id: stringID of the Tunnel this certificate is registered against.
-
-
next_page: string or nullOpaque cursor for the next page, or
nullif there are no more results.
Example
curl https://api.anthropic.com/v1/organizations/tunnels/$TUNNEL_ID/certificates \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: mcp-tunnels-2026-05-19' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "tcrt_01JmWq4ZxnBvR7tKpY2sLdH9",
"archived_at": "2024-11-01T23:59:27.427722Z",
"created_at": "2024-10-30T23:58:27.427722Z",
"expires_at": "2024-10-30T23:58:27.427722Z",
"fingerprint": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"tunnel_id": "tnl_01Hx9Kp2RtQvMn3sWbYdLcF8",
"type": "tunnel_certificate"
}
],
"next_page": "page_MjAyNS0wNS0xNFQwMDowMDowMFo="
}Get Tunnel Certificate
GET /v1/organizations/tunnels/{tunnel_id}/certificates/{certificate_id}
Deprecated
Deprecated. This Admin API endpoint is superseded by /v1/tunnels on the Claude API and will be removed after a migration window. New integrations should use /v1/tunnels with the anthropic-beta: mcp-tunnels-2026-06-22 header and a WIF token carrying the workspace:manage_tunnels scope. Existing integrations continue to work with the mcp-tunnels-2026-05-19 header and org:manage_tunnels scope during the migration window.
Retrieve a single certificate registered on a tunnel by ID.
Path parameters
-
tunnel_id: stringID of the Tunnel.
-
certificate_id: stringID of the Tunnel Certificate.
Headers
-
"anthropic-beta": array of AnthropicBetaThis endpoint is in beta: requests must send
mcp-tunnels-2026-05-19in this header.-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaOrganizationTunnelCertificate object-
type: "tunnel_certificate"Object type. Always
tunnel_certificatefor Tunnel Certificates.default: tunnel_certificate
-
id: stringID of the Tunnel Certificate.
-
archived_at: string or nullRFC 3339 datetime string indicating when the certificate was archived, or
nullif it is not archived.format: date-time
-
created_at: stringRFC 3339 datetime string indicating when the certificate was registered.
format: date-time
-
expires_at: string or nullRFC 3339 datetime string indicating when the certificate expires, or
nullif it does not expire.format: date-time
-
fingerprint: stringThe certificate's SHA-256 fingerprint, as a lowercase hex string.
-
tunnel_id: stringID of the Tunnel this certificate is registered against.
-
Example
curl https://api.anthropic.com/v1/organizations/tunnels/$TUNNEL_ID/certificates/$CERTIFICATE_ID \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: mcp-tunnels-2026-05-19' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "tcrt_01JmWq4ZxnBvR7tKpY2sLdH9",
"archived_at": "2024-11-01T23:59:27.427722Z",
"created_at": "2024-10-30T23:58:27.427722Z",
"expires_at": "2024-10-30T23:58:27.427722Z",
"fingerprint": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"tunnel_id": "tnl_01Hx9Kp2RtQvMn3sWbYdLcF8",
"type": "tunnel_certificate"
}Archive Tunnel Certificate
POST /v1/organizations/tunnels/{tunnel_id}/certificates/{certificate_id}/archive
Deprecated
Deprecated. This Admin API endpoint is superseded by /v1/tunnels on the Claude API and will be removed after a migration window. New integrations should use /v1/tunnels with the anthropic-beta: mcp-tunnels-2026-06-22 header and a WIF token carrying the workspace:manage_tunnels scope. Existing integrations continue to work with the mcp-tunnels-2026-05-19 header and org:manage_tunnels scope during the migration window.
Archive a certificate, removing it from the set Anthropic trusts for this tunnel.
The certificate record is retained. Archiving the last non-archived certificate is permitted; the tunnel rejects MCP traffic until a new certificate is added.
Path parameters
-
tunnel_id: stringID of the Tunnel.
-
certificate_id: stringID of the Tunnel Certificate.
Headers
-
"anthropic-beta": array of AnthropicBetaThis endpoint is in beta: requests must send
mcp-tunnels-2026-05-19in this header.-
string -
"message-batches-2024-09-24" or "prompt-caching-2024-07-31" or "computer-use-2024-10-22" or 43 more-
"message-batches-2024-09-24" -
"prompt-caching-2024-07-31" -
"computer-use-2024-10-22" -
"computer-use-2025-01-24" -
"pdfs-2024-09-25" -
"token-counting-2024-11-01" -
"token-efficient-tools-2025-02-19" -
"output-128k-2025-02-19" -
"files-api-2025-04-14" -
"mcp-client-2025-04-04" -
"mcp-client-2025-11-20" -
"dev-full-thinking-2025-05-14" -
"interleaved-thinking-2025-05-14" -
"code-execution-2025-05-22" -
"extended-cache-ttl-2025-04-11" -
"context-1m-2025-08-07" -
"context-management-2025-06-27" -
"model-context-window-exceeded-2025-08-26" -
"skills-2025-10-02" -
"fast-mode-2026-02-01" -
"output-300k-2026-03-24" -
"user-profiles-2026-03-24" -
"user-profiles-2026-08-18" -
"user-profiles-2026-09-04" -
"advisor-tool-2026-03-01" -
"managed-agents-2026-04-01" -
"cache-diagnosis-2026-04-07" -
"dreaming-2026-04-21" -
"thinking-token-count-2026-05-13" -
"server-side-fallback-2026-06-01" -
"server-side-fallback-2026-07-01" -
"fallback-credit-2026-06-01" -
"fallback-credit-2026-07-01" -
"agent-memory-2026-07-22" -
"mid-conversation-tool-changes-2026-07-01" -
"compact-2026-01-12" -
"computer-use-2025-11-24" -
"mcp-tunnels-2026-06-22" -
"structured-outputs-2025-11-13" -
"task-budgets-2026-03-13" -
"thinking-display-updates-2026-08-18" -
"ce-user-management-2026-07-13" -
"mid-conversation-output-config-2026-07-01" -
"thinking-binding-controls-2026-08-01" -
"mid-conversation-system-clear-at-2026-08-21" -
"compact-2026-09-04"
-
-
Returns
-
BetaOrganizationTunnelCertificate object-
type: "tunnel_certificate"Object type. Always
tunnel_certificatefor Tunnel Certificates.default: tunnel_certificate
-
id: stringID of the Tunnel Certificate.
-
archived_at: string or nullRFC 3339 datetime string indicating when the certificate was archived, or
nullif it is not archived.format: date-time
-
created_at: stringRFC 3339 datetime string indicating when the certificate was registered.
format: date-time
-
expires_at: string or nullRFC 3339 datetime string indicating when the certificate expires, or
nullif it does not expire.format: date-time
-
fingerprint: stringThe certificate's SHA-256 fingerprint, as a lowercase hex string.
-
tunnel_id: stringID of the Tunnel this certificate is registered against.
-
Example
curl https://api.anthropic.com/v1/organizations/tunnels/$TUNNEL_ID/certificates/$CERTIFICATE_ID/archive \
-X POST \
-H 'anthropic-version: 2023-06-01' \
-H 'anthropic-beta: mcp-tunnels-2026-05-19' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "tcrt_01JmWq4ZxnBvR7tKpY2sLdH9",
"archived_at": "2024-11-01T23:59:27.427722Z",
"created_at": "2024-10-30T23:58:27.427722Z",
"expires_at": "2024-10-30T23:58:27.427722Z",
"fingerprint": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"tunnel_id": "tnl_01Hx9Kp2RtQvMn3sWbYdLcF8",
"type": "tunnel_certificate"
}Organization › Analytics
Get Activity Summaries
GET /v1/organizations/analytics/summaries
Get organization-wide activity summaries for a date range.
Returns one entry per day from starting_date (inclusive) to ending_date
(exclusive). Data is typically available with a 1-day lag and may be
revised by a few percent over the following days: when ending_date is
omitted it defaults to the most recent available day + 1, so the last
entry covers the most recent available day. The series can be scoped to
an RBAC group via filter[]=rbac_group_id:{id}. Available to
organizations on a Claude Enterprise plan. Requires an API key with the
read:analytics scope.
Query parameters
-
starting_date: stringUTC date in YYYY-MM-DD format. Start of the date range (inclusive). Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.
format: date
-
ending_date: optional stringUTC date in YYYY-MM-DD format. End of the date range (exclusive). Data is typically available with a 1-day lag, so this can be at most today — which is also the default when omitted, making the last entry cover the most recent available day. Data may be revised by a few percent over the following days. The range may span at most 366 days.
format: date
-
filter: optional array of stringFilters as
dimension:value. Onlyrbac_group_idis supported (e.g.filter[]=rbac_group_id:{id}); repeat the param to OR across groups. Scopes the whole day series to members of the matching group(s), re-aggregated from member-level activity — org-wide seat/invite fields and the adoption rates derived from them are null on scoped rows.rbac_group_idaccepts the tagged id (rbac_group_..., as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each UTC day (time-of-usage attribution). At most 100 entries.maxItems: 100
Returns
-
BetaActivitySummary objectResponse for GET /v1/organizations/analytics/summaries.
-
summaries: array of object-
assigned_seat_count: number or nullNumber of seats currently assigned to members. Null when the response is scoped to an RBAC group — seat assignment is org-wide and has no per-group analogue.
-
cowork_daily_active_user_count: numberNumber of users with Cowork activity on the requested day
-
cowork_monthly_active_user_count: numberNumber of users with Cowork activity in the 30-day rolling window
-
cowork_weekly_active_user_count: numberNumber of users with Cowork activity in the 7-day rolling window
-
daily_active_user_count: numberNumber of users with token consumption on the requested day
-
daily_adoption_rate: number or nullPercentage of assigned seats with activity on the requested day (
DAU / assigned_seat_count * 100). Null when the response is scoped to an RBAC group. -
ending_at: stringEnd of the aggregation period (exclusive), UTC midnight in RFC 3339 format (e.g.
2026-01-16T00:00:00Z).format: date-time
-
monthly_active_user_count: numberNumber of users with token consumption in the 30-day rolling window
-
monthly_adoption_rate: number or nullPercentage of assigned seats with activity in the 30-day rolling window (
MAU / assigned_seat_count * 100). Null when the response is scoped to an RBAC group. -
pending_invite_count: number or nullNumber of pending invitations to join the organization. Null when the response is scoped to an RBAC group.
-
starting_at: stringStart of the aggregation period (inclusive), UTC midnight in RFC 3339 format (e.g.
2026-01-15T00:00:00Z).format: date-time
-
weekly_active_user_count: numberNumber of users with token consumption in the 7-day rolling window
-
weekly_adoption_rate: number or nullPercentage of assigned seats with activity in the 7-day rolling window (
WAU / assigned_seat_count * 100). Null when the response is scoped to an RBAC group. -
chat_daily_active_user_count: optional number or nullNumber of users with claude.ai (chat) activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
chat_monthly_active_user_count: optional number or nullNumber of users with claude.ai (chat) activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
chat_weekly_active_user_count: optional number or nullNumber of users with claude.ai (chat) activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
claude_code_daily_active_user_count: optional number or nullNumber of users with Claude Code activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
claude_code_monthly_active_user_count: optional number or nullNumber of users with Claude Code activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
claude_code_weekly_active_user_count: optional number or nullNumber of users with Claude Code activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
claude_design_daily_active_user_count: optional number or nullNumber of users with Claude Design activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
claude_design_monthly_active_user_count: optional number or nullNumber of users with Claude Design activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
claude_design_weekly_active_user_count: optional number or nullNumber of users with Claude Design activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
office_agent_daily_active_user_count: optional number or nullNumber of users with Claude in Office activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
office_agent_monthly_active_user_count: optional number or nullNumber of users with Claude in Office activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
office_agent_weekly_active_user_count: optional number or nullNumber of users with Claude in Office activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
science_daily_active_user_count: optional number or nullNumber of users with Claude Science activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
science_entitled_user_count: optional number or nullNumber of users with a Claude Science seat entitlement (per-seat RBAC) at the time of the daily snapshot. The funnel top; independent of the org-level Claude Science toggle. Null when the response is scoped to an RBAC group — entitlement is org-wide and has no per-group analogue. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
science_monthly_active_user_count: optional number or nullNumber of users with Claude Science activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
science_weekly_active_user_count: optional number or nullNumber of users with Claude Science activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.
-
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/summaries \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"summaries": [
{
"assigned_seat_count": 0,
"cowork_daily_active_user_count": 0,
"cowork_monthly_active_user_count": 0,
"cowork_weekly_active_user_count": 0,
"daily_active_user_count": 0,
"daily_adoption_rate": 0,
"ending_at": "2019-12-27T18:11:19.117Z",
"monthly_active_user_count": 0,
"monthly_adoption_rate": 0,
"pending_invite_count": 0,
"starting_at": "2019-12-27T18:11:19.117Z",
"weekly_active_user_count": 0,
"weekly_adoption_rate": 0,
"chat_daily_active_user_count": 0,
"chat_monthly_active_user_count": 0,
"chat_weekly_active_user_count": 0,
"claude_code_daily_active_user_count": 0,
"claude_code_monthly_active_user_count": 0,
"claude_code_weekly_active_user_count": 0,
"claude_design_daily_active_user_count": 0,
"claude_design_monthly_active_user_count": 0,
"claude_design_weekly_active_user_count": 0,
"office_agent_daily_active_user_count": 0,
"office_agent_monthly_active_user_count": 0,
"office_agent_weekly_active_user_count": 0,
"science_daily_active_user_count": 0,
"science_entitled_user_count": 0,
"science_monthly_active_user_count": 0,
"science_weekly_active_user_count": 0
}
]
}Organization › Analytics › Usage
Get Token Usage Over Time
GET /v1/organizations/analytics/usage_report
Get token usage over time across a date range.
Returns token usage bucketed by minute, hour, or day, optionally broken
down by product, model, context window, inference region, or speed.
Available to organizations on a Claude Enterprise plan. Requires an API
key with the read:analytics scope.
Query parameters
-
starting_at: stringStart of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.
format: date-time
-
bucket_width: optional "1d" or "1h" or "1m"Time bucket granularity.
default: 1d
-
"1d" -
"1h" -
"1m"
-
-
claude_tag_categories: optional array of "dm" or "engaged" or "monitoring" or 2 moreFilter to Claude Tag (Claude in Slack) usage in specific spend categories. Usage with no category never matches.
dmusage is reported under the user's product rather thanclaude-tag, so combining this filter withproducts[]=claude-tagexcludes it. Usegroup_by[]=claude_tag_categoryto break out per-category values.maxItems: 100
-
"dm" -
"engaged" -
"monitoring" -
"proactive" -
"scheduled"
-
-
claude_tag_user_ids: optional array of stringFilter to Claude Tag (Claude in Slack) usage attributed to specific Slack users, by Slack user ID (for example
U0123ABCDEF), not claude.ai user ID. Usage that is not Claude Tag, and Claude Tag usage not attributed to a single user, never matches. Usegroup_by[]=claude_tag_user_idto break out per-user values.maxItems: 100
-
context_windows: optional array of "0-200k" or "200k-1M"Filter to specific context-window pricing tiers. Use
group_by[]=context_windowto break out per-tier values.maxItems: 100
-
"0-200k" -
"200k-1M"
-
-
ending_at: optional stringEnd of range, exclusive. When omitted, defaults to the earlier of now and
starting_at+ 31 days. The range may span at most 31 days.format: date-time
-
group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 6 moreDimensions to break each time bucket out by. Defaults to no grouping (one total per bucket). Each bucket reports at most its top 100 groups; a group beyond that cap has no row in that bucket (there is no remainder row), so grouped buckets are not exhaustive when a dimension has more than 100 distinct values.
maxItems: 100
-
"claude_tag_category" -
"claude_tag_user_id" -
"context_window" -
"inference_geo" -
"model" -
"product" -
"rbac_group_id" -
"slack_channel_id" -
"speed"
-
-
inference_geos: optional array of "global" or "not_available" or "us"Filter to specific inference regions.
not_availablematches rows where the region is unset. Usegroup_by[]=inference_geoto break out per-region values.maxItems: 100
-
"global" -
"not_available" -
"us"
-
-
limit: optional numberMaximum number of time buckets per page. Defaults and caps vary by
bucket_width(1d: default 7, max 31;1h: default 24, max 168;1m: default 60, max 256).minimum: 1
-
models: optional array of stringModels to include. Defaults to all models. Use
group_by[]=modelto break out per-model values.maxItems: 100
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
products: optional array of "chat" or "claude-tag" or "claude_code" or 4 moreProduct surfaces to include. Defaults to all products. Use
group_by[]=productto break out per-product values.maxItems: 100
-
"chat" -
"claude-tag" -
"claude_code" -
"claude_design" -
"claude_in_chrome" -
"cowork" -
"office_agent"
-
-
rbac_group_ids: optional array of stringFilter to usage attributed to specific RBAC groups. Accepts tagged RBAC group IDs (
rbac_group_...) or bare group UUIDs. A row matches when the user belonged to any of the listed groups on the (UTC) day the usage occurred; usage with no group attribution never matches.maxItems: 100
-
slack_channel_ids: optional array of stringFilter to usage originating from specific Slack channels. Use
group_by[]=slack_channel_idto break out per-channel values.maxItems: 100
-
speeds: optional array of "fast" or "standard"Filter to fast or standard inference mode. Use
group_by[]=speedto break out per-mode values.maxItems: 100
-
"fast" -
"standard"
-
-
user_ids: optional array of stringFilter to specific users by tagged user ID.
maxItems: 100
Returns
-
BetaUsageBucket object-
data: array of objectTime buckets for this page, oldest first: one per
bucket_widthinterval, including intervals with no data (theirresultslist is empty). A page holds at mostlimitbuckets.-
ending_at: stringEnd of the time bucket (exclusive) in RFC 3339 format.
format: date-time
-
results: array of objectRows for this time bucket. Empty when the bucket has no data; otherwise a single combined row when
group_by[]is omitted, or one row per group (subject to the per-bucket group cap described on thegroup_by[]parameter).-
cache_creation: BetaCacheCreationThe number of input tokens for cache creation.
-
ephemeral_1h_input_tokens: numberThe number of input tokens used to create the 1 hour cache entry.
default: 0, minimum: 0
-
ephemeral_5m_input_tokens: numberThe number of input tokens used to create the 5 minute cache entry.
default: 0, minimum: 0
-
-
cache_read_input_tokens: numberThe number of input tokens read from the cache.
-
claude_tag_category: "dm" or "engaged" or "monitoring" or 2 more or nullClaude Tag (Claude in Slack) spend category:
engaged(a person addressed Claude in a channel or thread),proactive(Claude responded without being addressed),scheduled(a scheduled routine ran),monitoring(Claude watching a channel it was asked to monitor), ordm(direct messages with Claude). Populated only whenclaude_tag_categoryis ingroup_by[]; null for usage that is not Claude Tag. Direct-message usage is billed to the individual user and is reported under that user's product, not underclaude-tag. New categories may be added over time.-
"dm" -
"engaged" -
"monitoring" -
"proactive" -
"scheduled"
-
-
claude_tag_user_id: string or nullSlack user ID (for example
U0123ABCDEF) of the member the Claude Tag (Claude in Slack) usage is attributed to, not a claude.ai user ID. Populated only whenclaude_tag_user_idis ingroup_by[]; null for usage that is not Claude Tag and for Claude Tag usage that is not attributed to a single user (for examplemonitoring, andproactiveusage Claude initiated), so per-user rows can sum to less than the Claude Tag total. Cannot be combined withgroup_by[]=rbac_group_idor therbac_group_ids[]filter. -
context_window: "0-200k" or "200k-1M" or nullContext-window pricing tier of the usage or cost. Null unless
context_windowis ingroup_by[]; it can also be null on grouped rows with no context-window tier, such as code execution.-
"0-200k" -
"200k-1M"
-
-
inference_geo: "global" or "us" or nullInference region of the usage or cost. Null unless
inference_geois ingroup_by[]; it can also be null on grouped rows where the region is not set (the rows thatinference_geos[]=not_availablematches).-
"global" -
"us"
-
-
model: string or nullModel that produced the usage or cost, as a model name in the form the
models[]filter accepts (for example,claude-opus-5). Null unlessmodelis ingroup_by[]; it can also be null on grouped rows whose usage or cost is not attributed to a specific model, such as code execution. -
output_tokens: numberThe number of output tokens generated.
-
product: string or nullProduct surface that produced the usage or cost. Null unless product is in
group_by[]; it can also be null on grouped rows whose usage cannot be attributed to a known surface. Values includechat,claude_code,cowork,office_agent,claude_in_chrome,claude_design, andclaude-tag.claude-tagis Claude Tag, the Claude product in Slack. Some unattributed usage is reported as "other". -
rbac_group_id: string or nullRBAC group (team) the usage is attributed to, in the public tagged
rbac_group_...spelling — the same spelling the activity resources use for this key, so the same team has one id across resources and it round-trips as anrbac_group_ids[]filter value. Populated only whenrbac_group_idis ingroup_by[]. Any-membership semantics: a user in several groups contributes their full usage to each of those groups' rows, so the named-group rows overlap and their sum can exceed the org total. A null value is the single unassigned row: users in no group on that (UTC) day. For the true org total, run the same query withoutgroup_by[]. -
requests: number or nullNumber of API requests in this row's scope. For sandbox / code-execution events, this counts execution spans rather than HTTP requests (these rows surface with
product: null). -
server_tool_use: objectServer-side tool usage metrics.
-
web_search_requests: numberThe number of web search requests made.
-
-
slack_channel_id: string or nullSlack channel the usage originated from. Populated only when
slack_channel_idis ingroup_by[]; null for usage outside Slack (and for rows recorded before channel attribution was enabled). -
speed: "fast" or "standard" or nullInference speed mode of the usage or cost:
fastorstandard. Null unlessspeedis ingroup_by[].-
"fast" -
"standard"
-
-
uncached_input_tokens: numberThe number of uncached input tokens processed.
-
-
starting_at: stringStart of the time bucket (inclusive) in RFC 3339 format.
format: date-time
-
-
data_refreshed_at: string or nullRFC 3339 timestamp of the export this response was served from. Null when no export yet covers any part of the requested range, in which case every bucket's
resultslist is empty. Buckets beyond this watermark are incomplete; for stable results, setending_atto this value or earlier. Data is typically refreshed every 4 hours but not final until about 30 days after the usage date (late-arriving events, reconciliation adjustments).format: date-time
-
has_more: booleanWhether another page is available. When true, pass
next_pageas thepageparameter to fetch it. -
next_page: string or nullOpaque cursor for the next page, or null when
has_moreis false. Pass it as thepageparameter, keeping the other parameters unchanged. A cursor can expire after the underlying data refreshes; the request then returns HTTP 410 and pagination must restart from the first page. -
organization_id: stringID of the Organization.
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/usage_report \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"ending_at": "2019-12-27T18:11:19.117Z",
"results": [
{
"cache_creation": {
"ephemeral_1h_input_tokens": 0,
"ephemeral_5m_input_tokens": 0
},
"cache_read_input_tokens": 0,
"claude_tag_category": "dm",
"claude_tag_user_id": "U0123ABCDEF",
"context_window": "0-200k",
"inference_geo": "global",
"model": "claude-opus-5",
"output_tokens": 0,
"product": "chat",
"rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"requests": 0,
"server_tool_use": {
"web_search_requests": 10
},
"slack_channel_id": "C0123ABCDEF",
"speed": "fast",
"uncached_input_tokens": 0
}
],
"starting_at": "2019-12-27T18:11:19.117Z"
}
],
"data_refreshed_at": "2019-12-27T18:11:19.117Z",
"has_more": true,
"next_page": "next_page",
"organization_id": "org_013FP9SaFPBg7Kw7fetjn6cF"
}Get Per-User Token Usage
GET /v1/organizations/analytics/user_usage_report
Get per-user token usage across a date range.
Returns one row per user, ranked by the chosen token metric. Use this to
see which users consume the most tokens. Only usage attributable to a
seat user is included; for organization-wide totals including direct
API-key and automation traffic, use the bucketed
/v1/organizations/analytics/usage_report endpoint. Available to
organizations on a Claude Enterprise plan. Requires an API key with the
read:analytics scope.
Query parameters
-
starting_at: stringStart of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.
format: date-time
-
bucket_width: optional "1d" or "1h" or "1m"Time-bucket granularity. When set, each row's
starting_atandending_atare populated and one actor may span several rows (one per time bucket with usage). The time bucket counts towardlimit, so one page can return multiple rows for the same actor.ending_atis required whenbucket_widthis set, and withbucket_width="1m"the range may span at most 24 hours. When omitted, each row aggregates the full[starting_at, ending_at)range.-
"1d" -
"1h" -
"1m"
-
-
claude_tag_categories: optional array of "dm" or "engaged" or "monitoring" or 2 moreFilter to Claude Tag (Claude in Slack) usage in specific spend categories. Usage with no category never matches.
dmusage is reported under the user's product rather thanclaude-tag, so combining this filter withproducts[]=claude-tagexcludes it. Usegroup_by[]=claude_tag_categoryto break out per-category values.maxItems: 100
-
"dm" -
"engaged" -
"monitoring" -
"proactive" -
"scheduled"
-
-
claude_tag_user_ids: optional array of stringFilter to Claude Tag (Claude in Slack) usage attributed to specific Slack users, by Slack user ID (for example
U0123ABCDEF), not claude.ai user ID. Usage that is not Claude Tag, and Claude Tag usage not attributed to a single user, never matches. Usegroup_by[]=claude_tag_user_idto break out per-user values.maxItems: 100
-
context_windows: optional array of "0-200k" or "200k-1M"Filter to specific context-window pricing tiers. Use
group_by[]=context_windowto break out per-tier values.maxItems: 100
-
"0-200k" -
"200k-1M"
-
-
ending_at: optional stringEnd of range, exclusive. When omitted, defaults to the earlier of now and
starting_at+ 31 days. The range may span at most 31 days.format: date-time
-
exclude_deleted_users: optional booleanIf true, omit rows for users who are deleted (
deleted: true). A page may contain fewer thanlimitrows; usehas_moreandnext_pageto paginate as usual.default: false
-
group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 6 moreBreak each actor's row out by the given dimensions. Accepts the same values as the bucketed
/usage_reportendpoint.limitbounds (actor × time bucket × dimension) rows — with dimensions orbucket_widthpresent, one actor may span several rows.maxItems: 100
-
"claude_tag_category" -
"claude_tag_user_id" -
"context_window" -
"inference_geo" -
"model" -
"product" -
"rbac_group_id" -
"slack_channel_id" -
"speed"
-
-
inference_geos: optional array of "global" or "not_available" or "us"Filter to specific inference regions.
not_availablematches rows where the region is unset. Usegroup_by[]=inference_geoto break out per-region values.maxItems: 100
-
"global" -
"not_available" -
"us"
-
-
limit: optional numberNumber of rows per page (1-1000, default 20). One row per actor unless
group_by[]orbucket_widthsplits an actor across rows;cost_type/token_typefan-out rows (cost endpoint only) are the exception — they do not count toward this limit, sodatacan exceed it.default: 20, maximum: 1000, minimum: 1
-
models: optional array of stringModels to include. Defaults to all models. Use
group_by[]=modelto break out per-model values.maxItems: 100
-
order: optional "asc" or "desc"Sort direction. Defaults to
desc.default: desc
-
"asc" -
"desc"
-
-
order_by: optional "output_tokens" or "requests" or "total_tokens" or "uncached_input_tokens"Metric to rank actors by. Defaults to
total_tokens.default: total_tokens
-
"output_tokens" -
"requests" -
"total_tokens" -
"uncached_input_tokens"
-
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
products: optional array of "chat" or "claude-tag" or "claude_code" or 4 moreProduct surfaces to include. Defaults to all products.
maxItems: 100
-
"chat" -
"claude-tag" -
"claude_code" -
"claude_design" -
"claude_in_chrome" -
"cowork" -
"office_agent"
-
-
rbac_group_ids: optional array of stringFilter to usage attributed to specific RBAC groups. Accepts tagged RBAC group IDs (
rbac_group_...) or bare group UUIDs. A row matches when the user belonged to any of the listed groups on the (UTC) day the usage occurred; usage with no group attribution never matches.maxItems: 100
-
slack_channel_ids: optional array of stringFilter to usage originating from specific Slack channels. Use
group_by[]=slack_channel_idto break out per-channel values.maxItems: 100
-
speeds: optional array of "fast" or "standard"Filter to fast or standard inference mode. Use
group_by[]=speedto break out per-mode values.maxItems: 100
-
"fast" -
"standard"
-
-
user_ids: optional array of stringFilter to specific users by tagged user ID.
maxItems: 100
Returns
-
BetaUserUsage object-
data: array of objectRows for this page, ranked by
order_byin theorderdirection. One row per user, or several per user whengroup_by[]orbucket_widthbreaks that user's usage or cost out across rows. Rows split out bycost_typeortoken_type(cost endpoint only) stay adjacent and are ranked as one unit.-
actor: BetaAnalyticsUserActorThe user this row's usage or cost is attributed to. Always a
user_actor.-
type: "user_actor"Actor type. Always
"user_actor". -
deleted: booleanTrue when the account has been deleted, or when the user is no longer a member of the organization or its associated organizations (for example, their membership was removed or they were deprovisioned via your identity provider).
emailstays populated for removed users and is null when the account has been deleted.namefollows the rules described on that field. Theuser_idis still populated for reconciliation. -
email: string or nullThe user's email address, including for users who are no longer members of the organization or its associated organizations. Null when the account has been deleted (check
deleted) and for system-minted service accounts, which have no person's mailbox behind them (checkname). -
name: string or nullThe user's full name. Null when the user has not set a name. Returns
"Deleted User"when the account itself has been deleted, or when the user is no longer a member of the organization or its associated organizations and the organization has chosen to hide the names of removed users. Otherwise, the name stays populated for removed users. Rows for system-minted service accounts render the service name (for example,"Claude Security"for usage by Anthropic's security-patching service) or null. -
user_id: stringTagged user ID.
-
-
cache_creation: BetaCacheCreationThe number of input tokens for cache creation.
-
ephemeral_1h_input_tokens: numberThe number of input tokens used to create the 1 hour cache entry.
default: 0, minimum: 0
-
ephemeral_5m_input_tokens: numberThe number of input tokens used to create the 5 minute cache entry.
default: 0, minimum: 0
-
-
cache_read_input_tokens: numberThe number of input tokens read from the cache.
-
claude_tag_category: "dm" or "engaged" or "monitoring" or 2 more or nullClaude Tag (Claude in Slack) spend category:
engaged(a person addressed Claude in a channel or thread),proactive(Claude responded without being addressed),scheduled(a scheduled routine ran),monitoring(Claude watching a channel it was asked to monitor), ordm(direct messages with Claude). Populated only whenclaude_tag_categoryis ingroup_by[]; null for usage that is not Claude Tag. Direct-message usage is billed to the individual user and is reported under that user's product, not underclaude-tag. New categories may be added over time.-
"dm" -
"engaged" -
"monitoring" -
"proactive" -
"scheduled"
-
-
claude_tag_user_id: string or nullSlack user ID (for example
U0123ABCDEF) of the member the Claude Tag (Claude in Slack) usage is attributed to, not a claude.ai user ID. Populated only whenclaude_tag_user_idis ingroup_by[]; null for usage that is not Claude Tag and for Claude Tag usage that is not attributed to a single user (for examplemonitoring, andproactiveusage Claude initiated), so per-user rows can sum to less than the Claude Tag total. Cannot be combined withgroup_by[]=rbac_group_idor therbac_group_ids[]filter. -
context_window: "0-200k" or "200k-1M" or nullContext-window pricing tier of the usage or cost. Null unless
context_windowis ingroup_by[]; it can also be null on grouped rows with no context-window tier, such as code execution.-
"0-200k" -
"200k-1M"
-
-
ending_at: string or nullEnd of the row's UTC time bucket (exclusive), as an RFC 3339 timestamp; equal to
starting_atplus onebucket_width. Null unlessbucket_widthis set.format: date-time
-
inference_geo: "global" or "us" or nullInference region of the usage or cost. Null unless
inference_geois ingroup_by[]; it can also be null on grouped rows where the region is not set (the rows thatinference_geos[]=not_availablematches).-
"global" -
"us"
-
-
model: string or nullModel that produced the usage or cost, as a model name in the form the
models[]filter accepts (for example,claude-opus-5). Null unlessmodelis ingroup_by[]; it can also be null on grouped rows whose usage or cost is not attributed to a specific model, such as code execution. -
output_tokens: numberThe number of output tokens generated.
-
product: string or nullProduct surface that produced the usage or cost. Null unless product is in
group_by[]; it can also be null on grouped rows whose usage cannot be attributed to a known surface. Values includechat,claude_code,cowork,office_agent,claude_in_chrome,claude_design, andclaude-tag.claude-tagis Claude Tag, the Claude product in Slack. Some unattributed usage is reported as "other". -
rbac_group_id: string or nullRBAC group (team) the usage is attributed to, in the public tagged
rbac_group_...spelling — the same spelling the activity resources use for this key, so the same team has one id across resources and it round-trips as anrbac_group_ids[]filter value. Populated only whenrbac_group_idis ingroup_by[]. Any-membership semantics: a user in several groups contributes their full usage to each of those groups' rows, so the named-group rows overlap and their sum can exceed the org total. A null value is the single unassigned row: users in no group on that (UTC) day. For the true org total, run the same query withoutgroup_by[]. -
requests: number or nullNumber of API requests in this row's scope. For sandbox / code-execution events, this counts execution spans rather than HTTP requests (these rows surface with
product: null). -
server_tool_use: objectServer-side tool usage metrics.
-
web_search_requests: numberThe number of web search requests made.
-
-
slack_channel_id: string or nullSlack channel the usage originated from. Populated only when
slack_channel_idis ingroup_by[]; null for usage outside Slack (and for rows recorded before channel attribution was enabled). -
speed: "fast" or "standard" or nullInference speed mode of the usage or cost:
fastorstandard. Null unlessspeedis ingroup_by[].-
"fast" -
"standard"
-
-
starting_at: string or nullStart of the row's UTC time bucket (inclusive), as an RFC 3339 timestamp. Null unless
bucket_widthis set; withoutbucket_width, each row aggregates the full requested range.format: date-time
-
total_tokens: numberTotal token count across all token types. This is the value the default
order_by(total_tokens) sorts on. -
uncached_input_tokens: numberThe number of uncached input tokens processed.
-
-
data_refreshed_at: string or nullRFC 3339 timestamp of the export this response was served from. Null when no export yet covers any part of the requested range, in which case
datais empty. Data beyond this watermark is incomplete; for stable results, setending_atto this value or earlier. Data is typically refreshed every 4 hours but not final until about 30 days after the usage date (late-arriving events, reconciliation adjustments).format: date-time
-
has_more: booleanWhether another page is available. When true, pass
next_pageas thepageparameter to fetch it. -
next_page: string or nullOpaque cursor for the next page, or null when
has_moreis false. Pass it as thepageparameter, keeping the other parameters unchanged. A cursor can expire after the underlying data refreshes; the request then returns HTTP 410 and pagination must restart from the first page. -
organization_id: stringID of the Organization.
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/user_usage_report \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"actor": {
"deleted": true,
"email": "jane@example.com",
"name": "Jane Smith",
"type": "user_actor",
"user_id": "user_01AbCdEfGhIjKlMnOpQrSt"
},
"cache_creation": {
"ephemeral_1h_input_tokens": 0,
"ephemeral_5m_input_tokens": 0
},
"cache_read_input_tokens": 3200000,
"claude_tag_category": "dm",
"claude_tag_user_id": "U0123ABCDEF",
"context_window": "0-200k",
"ending_at": "2019-12-27T18:11:19.117Z",
"inference_geo": "global",
"model": "claude-opus-5",
"output_tokens": 891000,
"product": "chat",
"rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"requests": 128,
"server_tool_use": {
"web_search_requests": 10
},
"slack_channel_id": "C0123ABCDEF",
"speed": "fast",
"starting_at": "2019-12-27T18:11:19.117Z",
"total_tokens": 5377000,
"uncached_input_tokens": 1284500
}
],
"data_refreshed_at": "2019-12-27T18:11:19.117Z",
"has_more": true,
"next_page": "next_page",
"organization_id": "org_013FP9SaFPBg7Kw7fetjn6cF"
}Organization › Analytics › Cost
Get Cost Over Time
GET /v1/organizations/analytics/cost_report
Get cost in USD over time across a date range.
Returns cost bucketed by minute, hour, or day, optionally broken down by
product, model, context window, inference region, speed, cost type, or
token type. Available to organizations on a Claude Enterprise plan.
Requires an API key with the read:analytics scope.
Query parameters
-
starting_at: stringStart of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.
format: date-time
-
bucket_width: optional "1d" or "1h" or "1m"Time bucket granularity.
default: 1d
-
"1d" -
"1h" -
"1m"
-
-
claude_tag_categories: optional array of "dm" or "engaged" or "monitoring" or 2 moreFilter to Claude Tag (Claude in Slack) usage in specific spend categories. Usage with no category never matches.
dmusage is reported under the user's product rather thanclaude-tag, so combining this filter withproducts[]=claude-tagexcludes it. Usegroup_by[]=claude_tag_categoryto break out per-category values.maxItems: 100
-
"dm" -
"engaged" -
"monitoring" -
"proactive" -
"scheduled"
-
-
claude_tag_user_ids: optional array of stringFilter to Claude Tag (Claude in Slack) usage attributed to specific Slack users, by Slack user ID (for example
U0123ABCDEF), not claude.ai user ID. Usage that is not Claude Tag, and Claude Tag usage not attributed to a single user, never matches. Usegroup_by[]=claude_tag_user_idto break out per-user values.maxItems: 100
-
context_windows: optional array of "0-200k" or "200k-1M"Filter to specific context-window pricing tiers. Use
group_by[]=context_windowto break out per-tier values.maxItems: 100
-
"0-200k" -
"200k-1M"
-
-
ending_at: optional stringEnd of range, exclusive. When omitted, defaults to the earlier of now and
starting_at+ 31 days. The range may span at most 31 days.format: date-time
-
group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 8 moreDimensions to break each time bucket out by. Defaults to no grouping (one total per bucket). Each bucket reports at most its top 100 groups; a group beyond that cap has no row in that bucket (there is no remainder row), so grouped buckets are not exhaustive when a dimension has more than 100 distinct values.
maxItems: 100
-
"claude_tag_category" -
"claude_tag_user_id" -
"context_window" -
"cost_type" -
"inference_geo" -
"model" -
"product" -
"rbac_group_id" -
"slack_channel_id" -
"speed" -
"token_type"
-
-
inference_geos: optional array of "global" or "not_available" or "us"Filter to specific inference regions.
not_availablematches rows where the region is unset. Usegroup_by[]=inference_geoto break out per-region values.maxItems: 100
-
"global" -
"not_available" -
"us"
-
-
limit: optional numberMaximum number of time buckets per page. Defaults and caps vary by
bucket_width(1d: default 7, max 31;1h: default 24, max 168;1m: default 60, max 256).minimum: 1
-
models: optional array of stringModels to include. Defaults to all models. Use
group_by[]=modelto break out per-model values.maxItems: 100
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
products: optional array of "chat" or "claude-tag" or "claude_code" or 4 moreProduct surfaces to include. Defaults to all products. Use
group_by[]=productto break out per-product values.maxItems: 100
-
"chat" -
"claude-tag" -
"claude_code" -
"claude_design" -
"claude_in_chrome" -
"cowork" -
"office_agent"
-
-
rbac_group_ids: optional array of stringFilter to usage attributed to specific RBAC groups. Accepts tagged RBAC group IDs (
rbac_group_...) or bare group UUIDs. A row matches when the user belonged to any of the listed groups on the (UTC) day the usage occurred; usage with no group attribution never matches.maxItems: 100
-
slack_channel_ids: optional array of stringFilter to usage originating from specific Slack channels. Use
group_by[]=slack_channel_idto break out per-channel values.maxItems: 100
-
speeds: optional array of "fast" or "standard"Filter to fast or standard inference mode. Use
group_by[]=speedto break out per-mode values.maxItems: 100
-
"fast" -
"standard"
-
-
user_ids: optional array of stringFilter to specific users by tagged user ID.
maxItems: 100
Returns
-
BetaCostBucket object-
data: array of objectTime buckets for this page, oldest first: one per
bucket_widthinterval, including intervals with no data (theirresultslist is empty). A page holds at mostlimitbuckets.-
ending_at: stringEnd of the time bucket (exclusive) in RFC 3339 format.
format: date-time
-
results: array of objectRows for this time bucket. Empty when the bucket has no data; otherwise a single combined row when
group_by[]is omitted, or one row per group (subject to the per-bucket group cap described on thegroup_by[]parameter).-
amount: stringAmount (post-discount, pre-credit) in fractional cents.
-
claude_tag_category: "dm" or "engaged" or "monitoring" or 2 more or nullClaude Tag (Claude in Slack) spend category:
engaged(a person addressed Claude in a channel or thread),proactive(Claude responded without being addressed),scheduled(a scheduled routine ran),monitoring(Claude watching a channel it was asked to monitor), ordm(direct messages with Claude). Populated only whenclaude_tag_categoryis ingroup_by[]; null for usage that is not Claude Tag. Direct-message usage is billed to the individual user and is reported under that user's product, not underclaude-tag. New categories may be added over time.-
"dm" -
"engaged" -
"monitoring" -
"proactive" -
"scheduled"
-
-
claude_tag_user_id: string or nullSlack user ID (for example
U0123ABCDEF) of the member the Claude Tag (Claude in Slack) usage is attributed to, not a claude.ai user ID. Populated only whenclaude_tag_user_idis ingroup_by[]; null for usage that is not Claude Tag and for Claude Tag usage that is not attributed to a single user (for examplemonitoring, andproactiveusage Claude initiated), so per-user rows can sum to less than the Claude Tag total. Cannot be combined withgroup_by[]=rbac_group_idor therbac_group_ids[]filter. -
context_window: "0-200k" or "200k-1M" or nullContext-window pricing tier of the usage or cost. Null unless
context_windowis ingroup_by[]; it can also be null on grouped rows with no context-window tier, such as code execution.-
"0-200k" -
"200k-1M"
-
-
cost_type: "code_execution" or "tokens" or "web_search" or nullCost component when
group_by[]=cost_type; null otherwise (amount is the combined total).-
"code_execution" -
"tokens" -
"web_search"
-
-
currency: "USD"Currency code for the cost amount. Currently always
"USD".default: USD
-
inference_geo: "global" or "us" or nullInference region of the usage or cost. Null unless
inference_geois ingroup_by[]; it can also be null on grouped rows where the region is not set (the rows thatinference_geos[]=not_availablematches).-
"global" -
"us"
-
-
list_amount: stringList-price amount (pre-discount) in fractional cents.
-
model: string or nullModel that produced the usage or cost, as a model name in the form the
models[]filter accepts (for example,claude-opus-5). Null unlessmodelis ingroup_by[]; it can also be null on grouped rows whose usage or cost is not attributed to a specific model, such as code execution. -
product: string or nullProduct surface that produced the usage or cost. Null unless product is in
group_by[]; it can also be null on grouped rows whose usage cannot be attributed to a known surface. Values includechat,claude_code,cowork,office_agent,claude_in_chrome,claude_design, andclaude-tag.claude-tagis Claude Tag, the Claude product in Slack. Some unattributed usage is reported as "other". -
rbac_group_id: string or nullRBAC group (team) the usage is attributed to, in the public tagged
rbac_group_...spelling — the same spelling the activity resources use for this key, so the same team has one id across resources and it round-trips as anrbac_group_ids[]filter value. Populated only whenrbac_group_idis ingroup_by[]. Any-membership semantics: a user in several groups contributes their full usage to each of those groups' rows, so the named-group rows overlap and their sum can exceed the org total. A null value is the single unassigned row: users in no group on that (UTC) day. For the true org total, run the same query withoutgroup_by[]. -
requests: number or nullNumber of API requests in this row's scope. Null when
group_byincludescost_typeortoken_type(the count has no per-component attribution; read it from the ungrouped response). For sandbox / code-execution events, this counts execution spans rather than HTTP requests (these rows surface withproduct: null). -
slack_channel_id: string or nullSlack channel the usage originated from. Populated only when
slack_channel_idis ingroup_by[]; null for usage outside Slack (and for rows recorded before channel attribution was enabled). -
speed: "fast" or "standard" or nullInference speed mode of the usage or cost:
fastorstandard. Null unlessspeedis ingroup_by[].-
"fast" -
"standard"
-
-
token_type: "cache_creation.ephemeral_1h_input_tokens" or "cache_creation.ephemeral_5m_input_tokens" or "cache_read_input_tokens" or 2 more or nullToken type when
group_by[]=token_typeandcost_type=tokens; null otherwise.-
"cache_creation.ephemeral_1h_input_tokens" -
"cache_creation.ephemeral_5m_input_tokens" -
"cache_read_input_tokens" -
"output_tokens" -
"uncached_input_tokens"
-
-
-
starting_at: stringStart of the time bucket (inclusive) in RFC 3339 format.
format: date-time
-
-
data_refreshed_at: string or nullRFC 3339 timestamp of the export this response was served from. Null when no export yet covers any part of the requested range, in which case every bucket's
resultslist is empty. Buckets beyond this watermark are incomplete; for stable results, setending_atto this value or earlier. Data is typically refreshed every 4 hours but not final until about 30 days after the usage date (late-arriving events, reconciliation adjustments).format: date-time
-
has_more: booleanWhether another page is available. When true, pass
next_pageas thepageparameter to fetch it. -
next_page: string or nullOpaque cursor for the next page, or null when
has_moreis false. Pass it as thepageparameter, keeping the other parameters unchanged. A cursor can expire after the underlying data refreshes; the request then returns HTTP 410 and pagination must restart from the first page. -
organization_id: stringID of the Organization.
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/cost_report \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"ending_at": "2019-12-27T18:11:19.117Z",
"results": [
{
"amount": "amount",
"claude_tag_category": "dm",
"claude_tag_user_id": "U0123ABCDEF",
"context_window": "0-200k",
"cost_type": "code_execution",
"currency": "USD",
"inference_geo": "global",
"list_amount": "list_amount",
"model": "claude-opus-5",
"product": "chat",
"rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"requests": 0,
"slack_channel_id": "C0123ABCDEF",
"speed": "fast",
"token_type": "cache_creation.ephemeral_1h_input_tokens"
}
],
"starting_at": "2019-12-27T18:11:19.117Z"
}
],
"data_refreshed_at": "2019-12-27T18:11:19.117Z",
"has_more": true,
"next_page": "next_page",
"organization_id": "org_013FP9SaFPBg7Kw7fetjn6cF"
}Get Per-User Cost
GET /v1/organizations/analytics/user_cost_report
Get per-user cost in USD across a date range.
Returns one row per user, ranked by spend. Use this to see which users
account for the most cost. Only cost attributable to a seat user is
included; for organization-wide totals including direct API-key and
automation traffic, use the bucketed
/v1/organizations/analytics/cost_report endpoint. Available to
organizations on a Claude Enterprise plan. Requires an API key with the
read:analytics scope.
Query parameters
-
starting_at: stringStart of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.
format: date-time
-
bucket_width: optional "1d" or "1h" or "1m"Time-bucket granularity. When set, each row's
starting_atandending_atare populated and one actor may span several rows (one per time bucket with usage). The time bucket counts towardlimit, so one page can return multiple rows for the same actor.ending_atis required whenbucket_widthis set, and withbucket_width="1m"the range may span at most 24 hours. When omitted, each row aggregates the full[starting_at, ending_at)range.-
"1d" -
"1h" -
"1m"
-
-
claude_tag_categories: optional array of "dm" or "engaged" or "monitoring" or 2 moreFilter to Claude Tag (Claude in Slack) usage in specific spend categories. Usage with no category never matches.
dmusage is reported under the user's product rather thanclaude-tag, so combining this filter withproducts[]=claude-tagexcludes it. Usegroup_by[]=claude_tag_categoryto break out per-category values.maxItems: 100
-
"dm" -
"engaged" -
"monitoring" -
"proactive" -
"scheduled"
-
-
claude_tag_user_ids: optional array of stringFilter to Claude Tag (Claude in Slack) usage attributed to specific Slack users, by Slack user ID (for example
U0123ABCDEF), not claude.ai user ID. Usage that is not Claude Tag, and Claude Tag usage not attributed to a single user, never matches. Usegroup_by[]=claude_tag_user_idto break out per-user values.maxItems: 100
-
context_windows: optional array of "0-200k" or "200k-1M"Filter to specific context-window pricing tiers. Use
group_by[]=context_windowto break out per-tier values.maxItems: 100
-
"0-200k" -
"200k-1M"
-
-
ending_at: optional stringEnd of range, exclusive. When omitted, defaults to the earlier of now and
starting_at+ 31 days. The range may span at most 31 days.format: date-time
-
exclude_deleted_users: optional booleanIf true, omit rows for users who are deleted (
deleted: true). A page may contain fewer thanlimitrows; usehas_moreandnext_pageto paginate as usual.default: false
-
group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 8 moreBreak each actor's row out by the given dimensions. Accepts the same values as the bucketed
/cost_reportendpoint. Theproduct,model,context_window,inference_geo, andspeeddimensions — and the time bucket, whenbucket_widthis set — count towardlimit.cost_typeandtoken_typedo not:cost_typereturns one row per cost component (tokens, web search, code execution);token_typereturns one row per token type, each withcost_type: "tokens"; combining both returns the per-token-type rows plus the web-search and code-execution rows. A page can therefore contain more rows thanlimitwhencost_typeortoken_typeis requested.maxItems: 100
-
"claude_tag_category" -
"claude_tag_user_id" -
"context_window" -
"cost_type" -
"inference_geo" -
"model" -
"product" -
"rbac_group_id" -
"slack_channel_id" -
"speed" -
"token_type"
-
-
inference_geos: optional array of "global" or "not_available" or "us"Filter to specific inference regions.
not_availablematches rows where the region is unset. Usegroup_by[]=inference_geoto break out per-region values.maxItems: 100
-
"global" -
"not_available" -
"us"
-
-
limit: optional numberNumber of rows per page (1-1000, default 20). One row per actor unless
group_by[]orbucket_widthsplits an actor across rows;cost_type/token_typefan-out rows (cost endpoint only) are the exception — they do not count toward this limit, sodatacan exceed it.default: 20, maximum: 1000, minimum: 1
-
models: optional array of stringModels to include. Defaults to all models. Use
group_by[]=modelto break out per-model values.maxItems: 100
-
order: optional "asc" or "desc"Sort direction. Defaults to
desc.default: desc
-
"asc" -
"desc"
-
-
order_by: optional "amount" or "list_amount"Metric to rank actors by. Defaults to
amount.default: amount
-
"amount" -
"list_amount"
-
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
products: optional array of "chat" or "claude-tag" or "claude_code" or 4 moreProduct surfaces to include. Defaults to all products.
maxItems: 100
-
"chat" -
"claude-tag" -
"claude_code" -
"claude_design" -
"claude_in_chrome" -
"cowork" -
"office_agent"
-
-
rbac_group_ids: optional array of stringFilter to usage attributed to specific RBAC groups. Accepts tagged RBAC group IDs (
rbac_group_...) or bare group UUIDs. A row matches when the user belonged to any of the listed groups on the (UTC) day the usage occurred; usage with no group attribution never matches.maxItems: 100
-
slack_channel_ids: optional array of stringFilter to usage originating from specific Slack channels. Use
group_by[]=slack_channel_idto break out per-channel values.maxItems: 100
-
speeds: optional array of "fast" or "standard"Filter to fast or standard inference mode. Use
group_by[]=speedto break out per-mode values.maxItems: 100
-
"fast" -
"standard"
-
-
user_ids: optional array of stringFilter to specific users by tagged user ID.
maxItems: 100
Returns
-
BetaUserCost object-
data: array of objectRows for this page, ranked by
order_byin theorderdirection. One row per user, or several per user whengroup_by[]orbucket_widthbreaks that user's usage or cost out across rows. Rows split out bycost_typeortoken_type(cost endpoint only) stay adjacent and are ranked as one unit.-
actor: BetaAnalyticsUserActorThe user this row's usage or cost is attributed to. Always a
user_actor.-
type: "user_actor"Actor type. Always
"user_actor". -
deleted: booleanTrue when the account has been deleted, or when the user is no longer a member of the organization or its associated organizations (for example, their membership was removed or they were deprovisioned via your identity provider).
emailstays populated for removed users and is null when the account has been deleted.namefollows the rules described on that field. Theuser_idis still populated for reconciliation. -
email: string or nullThe user's email address, including for users who are no longer members of the organization or its associated organizations. Null when the account has been deleted (check
deleted) and for system-minted service accounts, which have no person's mailbox behind them (checkname). -
name: string or nullThe user's full name. Null when the user has not set a name. Returns
"Deleted User"when the account itself has been deleted, or when the user is no longer a member of the organization or its associated organizations and the organization has chosen to hide the names of removed users. Otherwise, the name stays populated for removed users. Rows for system-minted service accounts render the service name (for example,"Claude Security"for usage by Anthropic's security-patching service) or null. -
user_id: stringTagged user ID.
-
-
amount: stringAmount (post-discount, pre-credit) in fractional cents (minor units).
-
claude_tag_category: "dm" or "engaged" or "monitoring" or 2 more or nullClaude Tag (Claude in Slack) spend category:
engaged(a person addressed Claude in a channel or thread),proactive(Claude responded without being addressed),scheduled(a scheduled routine ran),monitoring(Claude watching a channel it was asked to monitor), ordm(direct messages with Claude). Populated only whenclaude_tag_categoryis ingroup_by[]; null for usage that is not Claude Tag. Direct-message usage is billed to the individual user and is reported under that user's product, not underclaude-tag. New categories may be added over time.-
"dm" -
"engaged" -
"monitoring" -
"proactive" -
"scheduled"
-
-
claude_tag_user_id: string or nullSlack user ID (for example
U0123ABCDEF) of the member the Claude Tag (Claude in Slack) usage is attributed to, not a claude.ai user ID. Populated only whenclaude_tag_user_idis ingroup_by[]; null for usage that is not Claude Tag and for Claude Tag usage that is not attributed to a single user (for examplemonitoring, andproactiveusage Claude initiated), so per-user rows can sum to less than the Claude Tag total. Cannot be combined withgroup_by[]=rbac_group_idor therbac_group_ids[]filter. -
context_window: "0-200k" or "200k-1M" or nullContext-window pricing tier of the usage or cost. Null unless
context_windowis ingroup_by[]; it can also be null on grouped rows with no context-window tier, such as code execution.-
"0-200k" -
"200k-1M"
-
-
cost_type: "code_execution" or "tokens" or "web_search" or nullCost component breakdown; null when returning the combined total.
-
"code_execution" -
"tokens" -
"web_search"
-
-
currency: "USD"Currency code for the cost amount. Currently always
"USD".default: USD
-
ending_at: string or nullEnd of the row's UTC time bucket (exclusive), as an RFC 3339 timestamp; equal to
starting_atplus onebucket_width. Null unlessbucket_widthis set.format: date-time
-
inference_geo: "global" or "us" or nullInference region of the usage or cost. Null unless
inference_geois ingroup_by[]; it can also be null on grouped rows where the region is not set (the rows thatinference_geos[]=not_availablematches).-
"global" -
"us"
-
-
list_amount: stringList-price amount (pre-discount) in fractional cents.
-
model: string or nullModel that produced the usage or cost, as a model name in the form the
models[]filter accepts (for example,claude-opus-5). Null unlessmodelis ingroup_by[]; it can also be null on grouped rows whose usage or cost is not attributed to a specific model, such as code execution. -
product: string or nullProduct surface that produced the usage or cost. Null unless product is in
group_by[]; it can also be null on grouped rows whose usage cannot be attributed to a known surface. Values includechat,claude_code,cowork,office_agent,claude_in_chrome,claude_design, andclaude-tag.claude-tagis Claude Tag, the Claude product in Slack. Some unattributed usage is reported as "other". -
rbac_group_id: string or nullRBAC group (team) the usage is attributed to, in the public tagged
rbac_group_...spelling — the same spelling the activity resources use for this key, so the same team has one id across resources and it round-trips as anrbac_group_ids[]filter value. Populated only whenrbac_group_idis ingroup_by[]. Any-membership semantics: a user in several groups contributes their full usage to each of those groups' rows, so the named-group rows overlap and their sum can exceed the org total. A null value is the single unassigned row: users in no group on that (UTC) day. For the true org total, run the same query withoutgroup_by[]. -
requests: number or nullNumber of API requests in this row's scope. Null when
group_byincludescost_typeortoken_type(the count has no per-component attribution; read it from the ungrouped response). For sandbox / code-execution events, this counts execution spans rather than HTTP requests (these rows surface withproduct: null). -
slack_channel_id: string or nullSlack channel the usage originated from. Populated only when
slack_channel_idis ingroup_by[]; null for usage outside Slack (and for rows recorded before channel attribution was enabled). -
speed: "fast" or "standard" or nullInference speed mode of the usage or cost:
fastorstandard. Null unlessspeedis ingroup_by[].-
"fast" -
"standard"
-
-
starting_at: string or nullStart of the row's UTC time bucket (inclusive), as an RFC 3339 timestamp. Null unless
bucket_widthis set; withoutbucket_width, each row aggregates the full requested range.format: date-time
-
token_type: "cache_creation.ephemeral_1h_input_tokens" or "cache_creation.ephemeral_5m_input_tokens" or "cache_read_input_tokens" or 2 more or nullToken type when
cost_typeistokens; null otherwise.-
"cache_creation.ephemeral_1h_input_tokens" -
"cache_creation.ephemeral_5m_input_tokens" -
"cache_read_input_tokens" -
"output_tokens" -
"uncached_input_tokens"
-
-
-
data_refreshed_at: string or nullRFC 3339 timestamp of the export this response was served from. Null when no export yet covers any part of the requested range, in which case
datais empty. Data beyond this watermark is incomplete; for stable results, setending_atto this value or earlier. Data is typically refreshed every 4 hours but not final until about 30 days after the usage date (late-arriving events, reconciliation adjustments).format: date-time
-
has_more: booleanWhether another page is available. When true, pass
next_pageas thepageparameter to fetch it. -
next_page: string or nullOpaque cursor for the next page, or null when
has_moreis false. Pass it as thepageparameter, keeping the other parameters unchanged. A cursor can expire after the underlying data refreshes; the request then returns HTTP 410 and pagination must restart from the first page. -
organization_id: stringID of the Organization.
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/user_cost_report \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"actor": {
"deleted": true,
"email": "jane@example.com",
"name": "Jane Smith",
"type": "user_actor",
"user_id": "user_01AbCdEfGhIjKlMnOpQrSt"
},
"amount": "41280.000000",
"claude_tag_category": "dm",
"claude_tag_user_id": "U0123ABCDEF",
"context_window": "0-200k",
"cost_type": "code_execution",
"currency": "USD",
"ending_at": "2019-12-27T18:11:19.117Z",
"inference_geo": "global",
"list_amount": "51600.000000",
"model": "claude-opus-5",
"product": "chat",
"rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"requests": 128,
"slack_channel_id": "C0123ABCDEF",
"speed": "fast",
"starting_at": "2019-12-27T18:11:19.117Z",
"token_type": "cache_creation.ephemeral_1h_input_tokens"
}
],
"data_refreshed_at": "2019-12-27T18:11:19.117Z",
"has_more": true,
"next_page": "next_page",
"organization_id": "org_013FP9SaFPBg7Kw7fetjn6cF"
}Organization › Analytics › Users
List User Activity
GET /v1/organizations/analytics/users
Get per-user activity for a given day, with cursor-based pagination.
Returns activity metrics for each user in the organization, sorted by email
address. Use group_by[] for per-RBAC-group aggregates, or filter[] to
scope results to specific members, groups, or a chat project. Available
to organizations on a Claude Enterprise plan. Requires an API key with
the read:analytics scope.
Query parameters
-
date: optional stringUTC date in YYYY-MM-DD format. The day to get user activity for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.
format: date
-
ending_date: optional stringUTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with
starting_date. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days afterstarting_date.format: date
-
filter: optional array of stringFilters as
dimension:value, e.g.filter[]=rbac_group_id:{id}. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint:project_id,rbac_group_id,user_id. Value forms:project_idtakes a tagged project id (claude_proj_...) and scopes each member's row to their claude.ai chat activity within that project (it cannot be combined withgroup_by[]or anrbac_group_idfilter);rbac_group_idtakes the tagged id (rbac_group_..., as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution);user_idtakes a tagged user id (user_...), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.maxItems: 100
-
group_by: optional array of "rbac_group_id"Dimensions to break results out by (e.g.
group_by[]=rbac_group_id). Supported on this endpoint:rbac_group_id. Rows are already per-member, so the one supported grouping aggregates them per RBAC group instead. Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses vianext_page; an unsupported dimension returns 400.rbac_group_idattributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.maxItems: 100
-
limit: optional numberNumber of results per page (1-1000, default 100).
minimum: 1, maximum: 1000
-
order: optional "asc" or "desc"Sort direction:
ascordesc. Defaults toascfor the endpoint's sort column and todescwhenorder_bynames a metric (a top-N ranking). Applies toorder_by, or to the endpoint's default sort field whenorder_byis omitted.-
"asc" -
"desc"
-
-
order_by: optional stringSort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
starting_date: optional stringUTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either
dateorstarting_date, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.format: date
Returns
-
BetaUserActivity objectResponse for GET /v1/organizations/analytics/users.
-
data: array of object-
chat_metrics: objectClaude.ai activity metrics for a single user on a given day.
-
connectors_used_count: numberNumber of MCP connector invocations.
-
distinct_artifacts_created_count: numberNumber of distinct artifacts created. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.
-
distinct_connectors_used_count: number or nullDistinct claude.ai connectors this user used. Excludes calls whose connector could not be identified and all calls from organizations with zero data retention. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_conversation_count: number or nullNumber of distinct conversations the user participated in. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_files_uploaded_count: number or nullNumber of distinct files uploaded. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_projects_created_count: numberNumber of distinct projects created. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.
-
distinct_projects_used_count: number or nullNumber of distinct projects used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_shared_artifacts_viewed_count: number or nullNumber of distinct shared artifacts the user viewed. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_skills_used_count: number or nullNumber of distinct skills used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
message_count: numberNumber of messages sent
-
shared_conversations_viewed_count: numberNumber of times the user opened a shared conversation in a project
-
thinking_message_count: numberNumber of messages that used extended thinking
-
-
claude_code_metrics: objectClaude Code activity metrics for a single user on a given day.
-
core_metrics: objectCore Claude Code activity metrics for a single user on a given day.
-
artifacts_created_count: numberNumber of artifacts created in Claude Code sessions: an artifact counts once, on the day a session first saves it. Counted from 2026-08-17; 0 on earlier days. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.
-
commit_count: numberNumber of commits made via Claude Code
-
distinct_session_count: number or nullNumber of distinct Claude Code sessions. On aggregated rows and in date-range mode: summed per-day distinct counts. A session essentially never spans a UTC day, so the sum is in practice the true distinct count.
-
lines_of_code: objectLines of code added and removed via Claude Code.
-
added_count: numberLines of code added
-
removed_count: numberLines of code removed
-
-
pull_request_count: numberNumber of pull requests created via Claude Code
-
-
tool_actions: objectPer-tool accepted/rejected counts for Claude Code file modification tools.
-
edit_tool: BetaToolActionCountsAccepted/rejected counts for a single Claude Code tool type.
-
accepted_count: numberNumber of tool proposals accepted
-
rejected_count: numberNumber of tool proposals rejected
-
-
multi_edit_tool: BetaToolActionCountsAccepted/rejected counts for a single Claude Code tool type.
-
notebook_edit_tool: BetaToolActionCountsAccepted/rejected counts for a single Claude Code tool type.
-
write_tool: BetaToolActionCountsAccepted/rejected counts for a single Claude Code tool type.
-
-
-
cowork_metrics: objectCowork activity metrics for a single user on a given day.
-
action_count: numberNumber of tool actions completed in Cowork sessions
-
artifacts_created_count: numberNumber of artifacts created in Cowork sessions: an artifact counts once, on the day a session first saves it. Counted from 2026-08-17; 0 on earlier days. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.
-
connectors_used_count: numberTotal number of connector invocations in Cowork sessions
-
dispatch_turn_count: numberNumber of Dispatch (background agent) turns completed
-
distinct_connectors_used_count: number or nullNumber of distinct connectors used in Cowork sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_session_count: number or nullNumber of distinct Cowork sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_skills_used_count: number or nullNumber of distinct skills used in Cowork sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
message_count: numberNumber of messages sent in Cowork sessions
-
skills_used_count: numberTotal number of skill invocations in Cowork sessions
-
distinct_plugins_used_count: optional number or nullNumber of distinct plugins used in Cowork sessions. Null while Cowork plugin-use metrics are not enabled for this organization. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
edit_tool_count: optional number or nullNumber of successful Edit tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.
-
file_edit_count: optional number or nullNumber of successful file-edit tool calls (Edit, MultiEdit, Write, NotebookEdit) in Cowork sessions. Null, never 0, while the file-edit metrics are not enabled for this organization.
-
multi_edit_tool_count: optional number or nullNumber of successful MultiEdit tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.
-
notebook_edit_tool_count: optional number or nullNumber of successful NotebookEdit tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.
-
plugins_used_count: optional number or nullTotal number of plugin invocations in Cowork sessions. Null while Cowork plugin-use metrics are not enabled for this organization.
-
sessions_with_file_edits_count: optional number or nullNumber of distinct Cowork sessions with at least one successful file-edit tool call. Null while the file-edit metrics are not enabled for this organization. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
write_tool_count: optional number or nullNumber of successful Write tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.
-
-
design_metrics: objectClaude Design activity metrics for a single user on a given day.
-
distinct_projects_created_count: numberNumber of distinct Claude Design projects created. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.
-
distinct_projects_used_count: number or nullNumber of distinct Claude Design projects the user worked in. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_session_count: number or nullNumber of distinct Claude Design sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
message_count: numberNumber of messages sent in Claude Design sessions
-
-
office_metrics: objectOffice Agent activity metrics for a single user on a given day, broken out by Office product.
-
excel: BetaOfficeProductMetricsOffice Agent activity metrics for a single user on a given day within one Office product.
-
connectors_used_count: numberNumber of MCP connector invocations
-
distinct_connectors_used_count: number or nullNumber of distinct MCP connectors used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_session_count: number or nullNumber of distinct Office Agent sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
distinct_skills_used_count: number or nullNumber of distinct skills used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
message_count: numberNumber of messages sent
-
skills_used_count: numberNumber of skill invocations
-
-
outlook: BetaOfficeProductMetricsOffice Agent activity metrics for a single user on a given day within one Office product.
-
powerpoint: BetaOfficeProductMetricsOffice Agent activity metrics for a single user on a given day within one Office product.
-
word: BetaOfficeProductMetricsOffice Agent activity metrics for a single user on a given day within one Office product.
-
-
science_metrics: objectClaude Science activity metrics for a single user on a given day.
-
delegation_count: numberNumber of delegations (handoffs to a specialized agent) in Claude Science sessions
-
distinct_session_count: number or nullNumber of distinct Claude Science sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
message_count: numberNumber of messages sent in Claude Science sessions
-
remote_compute_job_count: numberNumber of remote compute jobs launched from Claude Science sessions
-
skills_used_count: numberTotal number of skill invocations in Claude Science sessions
-
-
web_search_count: numberNumber of web searches performed
-
distinct_user_count: optional number or nullNumber of distinct active users represented by this row. Only set for grouped rollups (
group_by[]); null for per-user rows. In date-range mode, recomputed as an exact distinct count of the group's active members over the requested window, never a sum of per-day values. -
last_activity_date: optional string or nullMost recent UTC day (YYYY-MM-DD) on which the user had any counted activity, within the requested window: equal to the requested
datein single-day mode, and to the latest active day fromstarting_date(inclusive) toending_date(exclusive) in date-range rollup mode — never a day earlier than the window start. On filtered requests (filter[]) only days matching the filter count: withfilter[]=rbac_group_id:{id}it is the last day the user was active while a member of that group, consistent with the row's other metrics. On grouped (group_by[]) rows it is the latest day any member of the group was active (the requesteddatein single-day mode). Omitted from the response while last-activity reporting is not enabled for this organization.format: date
-
rbac_group_id: optional string or nullTagged RBAC group identifier (
rbac_group_...), matching the spend-limits API spelling. Present only when the request grouped byrbac_group_id. -
rbac_group_name: optional string or nullResolved RBAC group display name, alongside
rbac_group_idwhen name resolution is available. Null if the group has been deleted or its name could not be resolved;rbac_group_idremains the stable key. -
user: optional BetaAnalyticsUser or nullA user in the organization, identified by tagged id and email address.
-
type: "user"Object type. Always
user.default: user
-
id: stringTagged user identifier (e.g.
user_...) -
email_address: stringEmail address of the user
-
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/users \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"chat_metrics": {
"connectors_used_count": 0,
"distinct_artifacts_created_count": 0,
"distinct_connectors_used_count": 0,
"distinct_conversation_count": 0,
"distinct_files_uploaded_count": 0,
"distinct_projects_created_count": 0,
"distinct_projects_used_count": 0,
"distinct_shared_artifacts_viewed_count": 0,
"distinct_skills_used_count": 0,
"message_count": 0,
"shared_conversations_viewed_count": 0,
"thinking_message_count": 0
},
"claude_code_metrics": {
"core_metrics": {
"artifacts_created_count": 0,
"commit_count": 0,
"distinct_session_count": 0,
"lines_of_code": {
"added_count": 0,
"removed_count": 0
},
"pull_request_count": 0
},
"tool_actions": {
"edit_tool": {
"accepted_count": 0,
"rejected_count": 0
},
"multi_edit_tool": {
"accepted_count": 0,
"rejected_count": 0
},
"notebook_edit_tool": {
"accepted_count": 0,
"rejected_count": 0
},
"write_tool": {
"accepted_count": 0,
"rejected_count": 0
}
}
},
"cowork_metrics": {
"action_count": 0,
"artifacts_created_count": 0,
"connectors_used_count": 0,
"dispatch_turn_count": 0,
"distinct_connectors_used_count": 0,
"distinct_session_count": 0,
"distinct_skills_used_count": 0,
"message_count": 0,
"skills_used_count": 0,
"distinct_plugins_used_count": 0,
"edit_tool_count": 0,
"file_edit_count": 0,
"multi_edit_tool_count": 0,
"notebook_edit_tool_count": 0,
"plugins_used_count": 0,
"sessions_with_file_edits_count": 0,
"write_tool_count": 0
},
"design_metrics": {
"distinct_projects_created_count": 0,
"distinct_projects_used_count": 0,
"distinct_session_count": 0,
"message_count": 0
},
"office_metrics": {
"excel": {
"connectors_used_count": 0,
"distinct_connectors_used_count": 0,
"distinct_session_count": 0,
"distinct_skills_used_count": 0,
"message_count": 0,
"skills_used_count": 0
},
"outlook": {
"connectors_used_count": 0,
"distinct_connectors_used_count": 0,
"distinct_session_count": 0,
"distinct_skills_used_count": 0,
"message_count": 0,
"skills_used_count": 0
},
"powerpoint": {
"connectors_used_count": 0,
"distinct_connectors_used_count": 0,
"distinct_session_count": 0,
"distinct_skills_used_count": 0,
"message_count": 0,
"skills_used_count": 0
},
"word": {
"connectors_used_count": 0,
"distinct_connectors_used_count": 0,
"distinct_session_count": 0,
"distinct_skills_used_count": 0,
"message_count": 0,
"skills_used_count": 0
}
},
"science_metrics": {
"delegation_count": 0,
"distinct_session_count": 0,
"message_count": 0,
"remote_compute_job_count": 0,
"skills_used_count": 0
},
"web_search_count": 0,
"distinct_user_count": 0,
"last_activity_date": "2019-12-27",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"user": {
"id": "id",
"email_address": "email_address",
"type": "user"
}
}
],
"next_page": "next_page"
}Organization › Analytics › Skills
Get Skill Usage
GET /v1/organizations/analytics/skills
Get per-skill usage for a given day, with cursor-based pagination.
Returns skill usage metrics for the organization, sorted by skill name.
Use group_by[] to break usage out per member, per RBAC group, or per
product surface, and filter[] to scope results; the parameter
descriptions list the supported dimensions. Available to organizations
on a Claude Enterprise plan. Requires an API key with the
read:analytics scope.
Query parameters
-
date: optional stringUTC date in YYYY-MM-DD format. The day to get skill usage for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.
format: date
-
ending_date: optional stringUTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with
starting_date. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days afterstarting_date.format: date
-
filter: optional array of stringFilters as
dimension:value, e.g.filter[]=rbac_group_id:{id}. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint:product,rbac_group_id,share_status,skill_name,user_id. Value forms:productis one ofchat,claude_code,cowork, oroffice_agent;rbac_group_idtakes the tagged id (rbac_group_..., as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution);share_statusis one oforganization,private, orpublic;skill_namematches case-insensitively;user_idtakes a tagged user id (user_...), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.maxItems: 100
-
group_by: optional array of "product" or "rbac_group_id" or "user_id"Dimensions to break results out by (e.g.
group_by[]=user_id). Supported on this endpoint:product,rbac_group_id,user_id. Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses vianext_page; an unsupported dimension returns 400.rbac_group_idattributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.maxItems: 100
-
"product" -
"rbac_group_id" -
"user_id"
-
-
limit: optional numberNumber of results per page (1-1000, default 100).
minimum: 1, maximum: 1000
-
order: optional "asc" or "desc"Sort direction:
ascordesc. Defaults toascfor the endpoint's sort column and todescwhenorder_bynames a metric (a top-N ranking). Applies toorder_by, or to the endpoint's default sort field whenorder_byis omitted.-
"asc" -
"desc"
-
-
order_by: optional stringSort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
starting_date: optional stringUTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either
dateorstarting_date, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.format: date
Returns
-
BetaSkillUsage objectResponse for GET /v1/organizations/analytics/skills.
-
data: array of object-
chat_metrics: objectClaude.ai activity metrics for a single skill on a given day.
-
distinct_conversation_skill_used_count: number or nullNumber of distinct conversations in which the skill was used. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
-
claude_code_metrics: objectClaude Code activity metrics for a single skill on a given day.
-
distinct_session_skill_used_count: number or nullNumber of distinct Claude Code sessions in which the skill was used. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
-
cowork_metrics: objectCowork activity metrics for a single skill on a given day.
-
distinct_session_skill_used_count: number or nullNumber of distinct Cowork sessions in which the skill was used. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
-
distinct_user_count: numberNumber of distinct users who used the skill on the requested day, or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted.
-
office_metrics: objectOffice Agent activity metrics for a single skill on a given day, broken out by Office product.
-
excel: BetaSkillOfficeProductMetricsOffice Agent activity metrics for a single skill on a given day within one Office product.
-
distinct_session_skill_used_count: number or nullNumber of distinct Office Agent sessions in which the skill was used. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
-
outlook: BetaSkillOfficeProductMetricsOffice Agent activity metrics for a single skill on a given day within one Office product.
-
powerpoint: BetaSkillOfficeProductMetricsOffice Agent activity metrics for a single skill on a given day within one Office product.
-
word: BetaSkillOfficeProductMetricsOffice Agent activity metrics for a single skill on a given day within one Office product.
-
-
skill_name: stringName of the skill
-
attributed_list_price: optional string or nullList-price (rate-card) value of the member requests attributed to this skill, as a decimal string in the minor unit of
currency(cents for USD), from Claude Code, Cowork, and Office Agent request-level attribution — the value of requests that involved the skill, not the skill's incremental cost. Unlikeestimated_overage_spendthis reflects usage value regardless of how it was funded — seat-covered usage counts — but it is undiscounted and does not tie to billed spend or the organization's spend reporting. claude.ai chat usage carries no request-level attribution and contributes nothing: the field is null onchatproduct rows and onoffice_agentproduct cuts dated before 2026-06-18 (the Office Agent attribution data-start), and on ungrouped rows it covers the Claude Code + Cowork + Office Agent share only (null when no attributable usage exists). Also null under the same conditions asestimated_overage_spend(spend reporting not enabled for this organization,office_agentproduct cuts before the 2026-06-18 data-start). "0" means attributable usage existed but none was attributed to this skill. Addable across days: date-range rollup mode returns the window's sum. Ongroup_by[]andfilter[]shapes both amounts can total below the ungrouped value for the same skill over the same date or range: spend attributed to a member–skill pair with no counted usage on that day is excluded from those cuts. -
currency: optional "USD" or nullCurrency for this row's monetary fields (
estimated_overage_spendandattributed_list_price), as an uppercase ISO-4217 code. Always "USD" when either amount is populated; null whenever both amounts are null. -
enable_count: optional number or nullDistinct accounts that enabled this skill on the requested day (claude.ai only — the skill analog of plugin
install_count). The count is org-wide: null when enable reporting is not enabled for this organization, or when the request scopes touser_id/rbac_group_id/productviagroup_by[]orfilter[](an org-wide count would be misleading on per-cut rows). A distinct count, not an event count: summing across days double-counts members who enable the skill on more than one day, so it is also null in date-range rollup mode (starting_date/ending_date). -
estimated_overage_spend: optional string or nullEstimated overage spend attributed to this skill, as a decimal string in the minor unit of
currency(cents for USD; "1250" is $12.50, fractional cents possible) — an allocation of each member's daily post-discount, pre-credit metered overage spend (the same cost basis as the organization's spend reporting and the Cost & Usage API, so per-skill figures are directly comparable; spend with no skill attribution — including any member-day without skill invocations — is not represented, so skill rows sum to at most those totals) across the skills the member used. Overage only: usage covered by included seat allowances bills nothing and allocates $0 here — seeattributed_list_pricefor the funding-independent usage-value companion. Claude Code, Cowork, and Office Agent spend use request-level skill attribution; claude.ai chat spend is approximated proportionally to skill-invoking messages. An estimate, not a billing number — and the cost of the requests/messages that involved the skill, not the skill's incremental cost (the same request would still have cost something without the skill active). "0" means no overage spend was attributed; null when spend reporting is not enabled for this organization, onoffice_agentproduct cuts dated before 2026-06-18 (the Office Agent attribution data-start). Addable across days: date-range rollup mode (starting_date/ending_date) returns the window's sum. Withgroup_by[]=user_ideach row carries the user's own attributed spend. Ongroup_by[]andfilter[]shapes both amounts can total below the ungrouped value for the same skill over the same date or range: spend attributed to a member–skill pair with no counted usage on that day is excluded from those cuts. -
invocation_count: optional number or nullTotal number of times this skill was invoked on the requested day (the skill analog of plugin
invocation_count). Unlikedistinct_user_count— which answers '# of users' — this is the true '# of uses'. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Null when invocation reporting is not enabled for this organization. Sum across a date range for total uses in the window — date-range rollup mode (starting_date/ending_date) returns this sum directly. -
product: optional string or nullProduct that produced this row's activity: one of
chat,claude_code,cowork, oroffice_agent(the canonical Cost & Usage product naming; anoffice_agentrow's per-surface breakdown is in itsoffice_metrics). On/pluginsonlycoworkandclaude_codeoccur (the only surfaces with plugin attribution); on/artifactsonlychat,claude_code, andcoworkoccur (the surfaces that create artifacts);/apps/chat/projectsdoes not support the product dimension (aproductentry ingroup_by[]orfilter[]there is rejected). Present only when the request grouped byproduct. -
rbac_group_id: optional string or nullTagged RBAC group identifier (
rbac_group_...), matching the spend-limits API spelling. Present only when the request grouped byrbac_group_id. -
rbac_group_name: optional string or nullResolved RBAC group display name, alongside
rbac_group_idwhen name resolution is available. Null if the group has been deleted or its name could not be resolved;rbac_group_idremains the stable key. -
share_status: optional "organization" or "private" or "public" or nullSkill share status (claude.ai only): one of
private,organization, orpublic. Null for skills used only in Claude Code or Office (no per-skill share-status concept) and when share-status reporting is not yet available for the organization. Filterable viafilter[]=share_status:{value}.-
"organization" -
"private" -
"public"
-
-
skill_display_name: optional string or nullHuman-readable display name for rows whose
skill_nameis an opaque skill id (user/organization skill types and plugin-delivered skills — user-defined names are withheld from the analytics pipeline). Organization-shared skills and skills delivered by the organization's own plugins (its plugin marketplaces and its library) resolve; plugin skill names are shown without their 'plugin:' prefix. The literal 'unknown' bucket row gets a fixed 'Unknown skill' label. Null for private (user-defined) skills and members' personal-plugin skills — those names are not disclosed to analytics-key holders — and for Anthropic-provided plugin skills (not resolved), and null whenskill_nameis already a display name, when the skill or plugin was deleted, or when display-name resolution is not enabled for this organization. -
user_id: optional string or nullTagged user identifier (e.g.
user_...). Present only when the request grouped byuser_id.
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/skills \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"chat_metrics": {
"distinct_conversation_skill_used_count": 0
},
"claude_code_metrics": {
"distinct_session_skill_used_count": 0
},
"cowork_metrics": {
"distinct_session_skill_used_count": 0
},
"distinct_user_count": 0,
"office_metrics": {
"excel": {
"distinct_session_skill_used_count": 0
},
"outlook": {
"distinct_session_skill_used_count": 0
},
"powerpoint": {
"distinct_session_skill_used_count": 0
},
"word": {
"distinct_session_skill_used_count": 0
}
},
"skill_name": "skill_name",
"attributed_list_price": "attributed_list_price",
"currency": "USD",
"enable_count": 0,
"estimated_overage_spend": "estimated_overage_spend",
"invocation_count": 0,
"product": "product",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"share_status": "organization",
"skill_display_name": "skill_display_name",
"user_id": "user_id"
}
],
"next_page": "next_page"
}Organization › Analytics › Connectors
Get Connector Usage
GET /v1/organizations/analytics/connectors
Get per-connector usage for a given day, with cursor-based pagination.
Returns connector usage metrics for the organization, sorted by connector
name. Connector names are normalized from their various sources — for
example, "Atlassian MCP server" and "mcp-atlassian" both appear as
"atlassian". Use group_by[] to break usage out per member, per RBAC
group, or per product surface, and filter[] to scope results; the
parameter descriptions list the supported dimensions. Available to
organizations on a Claude Enterprise plan. Requires an API key with the
read:analytics scope.
Query parameters
-
date: optional stringUTC date in YYYY-MM-DD format. The day to get connector usage for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.
format: date
-
ending_date: optional stringUTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with
starting_date. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days afterstarting_date.format: date
-
filter: optional array of stringFilters as
dimension:value, e.g.filter[]=rbac_group_id:{id}. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint:connector_name,product,rbac_group_id,user_id. Value forms:connector_namematches case-insensitively, a display name such as 'GitHub MCP' also matches its normalized stored form ('github'), and for rows whoseconnector_nameis an opaque connector id the connector's display name (connector_display_name) also matches;productis one ofchat,claude_code,cowork, oroffice_agent;rbac_group_idtakes the tagged id (rbac_group_..., as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution);user_idtakes a tagged user id (user_...), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.maxItems: 100
-
group_by: optional array of "product" or "rbac_group_id" or "user_id"Dimensions to break results out by (e.g.
group_by[]=user_id). Supported on this endpoint:product,rbac_group_id,user_id. Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses vianext_page; an unsupported dimension returns 400.rbac_group_idattributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.maxItems: 100
-
"product" -
"rbac_group_id" -
"user_id"
-
-
limit: optional numberNumber of results per page (1-1000, default 100).
minimum: 1, maximum: 1000
-
order: optional "asc" or "desc"Sort direction:
ascordesc. Defaults toascfor the endpoint's sort column and todescwhenorder_bynames a metric (a top-N ranking). Applies toorder_by, or to the endpoint's default sort field whenorder_byis omitted.-
"asc" -
"desc"
-
-
order_by: optional stringSort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
starting_date: optional stringUTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either
dateorstarting_date, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.format: date
Returns
-
BetaConnectorUsage objectResponse for GET /v1/organizations/analytics/connectors.
-
data: array of object-
chat_metrics: objectClaude.ai activity metrics for a single connector on a given day.
-
distinct_conversation_connector_used_count: number or nullNumber of distinct conversations in which the connector was used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
-
claude_code_metrics: objectClaude Code activity metrics for a single connector on a given day.
-
distinct_session_connector_used_count: number or nullNumber of distinct Claude Code sessions in which the connector was used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
-
connector_name: stringName of the connector. Some rows carry an opaque connector id here instead of a readable name;
connector_display_nameholds the resolved name for those rows. -
cowork_metrics: objectCowork activity metrics for a single connector on a given day.
-
distinct_session_connector_used_count: number or nullNumber of distinct Cowork sessions in which the connector was used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
-
distinct_user_count: numberNumber of distinct users who used the connector on the requested day, or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values.
-
office_metrics: objectOffice Agent activity metrics for a single connector on a given day, broken out by Office product.
-
excel: BetaConnectorOfficeProductMetricsOffice Agent activity metrics for a single connector on a given day within one Office product.
-
distinct_session_connector_used_count: number or nullNumber of distinct Office Agent sessions in which the connector was used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.
-
-
outlook: BetaConnectorOfficeProductMetricsOffice Agent activity metrics for a single connector on a given day within one Office product.
-
powerpoint: BetaConnectorOfficeProductMetricsOffice Agent activity metrics for a single connector on a given day within one Office product.
-
word: BetaConnectorOfficeProductMetricsOffice Agent activity metrics for a single connector on a given day within one Office product.
-
-
connector_display_name: optional string or nullHuman-readable display name for rows whose
connector_nameis an opaque connector id rather than a readable name, resolved at request time from the organization's connectors (including connectors that have since been removed).connector_nameremains the row's stable key for sorting and pagination, andfilter[]=connector_name:{value}also matches these rows by display name. Display names are not unique, and the same connector's claude.ai usage can appear under a separate row with a readableconnector_name. Null whenconnector_nameis already a readable name, when the id cannot be resolved to one of the organization's connectors, or when display-name resolution is not enabled for this organization. -
individual_auth_distinct_user_count: optional number or nullNumber of distinct users whose use of this connector on the requested day ran on their own individual credential, connected through their own consent flow. Companion bucket to
managed_auth_distinct_user_count, which carries the measurement, attribution, and null rules. Users whose requests used no stored credential count in neither bucket. -
managed_auth_distinct_user_count: optional number or nullNumber of distinct users whose use of this connector on the requested day ran on Enterprise Managed Auth (an organization-managed credential provisioned through the organization's identity provider), read from the token record each request used. Null, never 0, when managed-auth reporting is not enabled for the organization, the value cannot be attributed to the row, no credentialed requests and no managed-token mint events (a managed credential being provisioned for a user's use of the connector) were observed that day, or the day predates 2026-07-01, the first day the backing data exists (forward-only data, no backfill). When credentialed requests or mint events were observed and attributed, both managed-auth fields populate, reporting 0 for a bucket with no users; the two counts are independent, not a partition — a user whose requests that day used both kinds of credential counts in both. Mint events carry user but not surface attribution, so they count as observed auth activity on
user_idandrbac_group_idcuts — attributed to the user the credential was provisioned for — but never on a cut that referencesproduct(group or filter). Date-range rollup mode (starting_date/ending_date) computes both fields exactly over the window — distinct users with at least one qualifying day — when the whole window starts on or after 2026-07-01, with the null-versus-0 and mint-event rules applying with the window in place of the day; a range starting earlier reports every managed-auth field as null, never a partial-window value. -
product: optional string or nullProduct that produced this row's activity: one of
chat,claude_code,cowork, oroffice_agent(the canonical Cost & Usage product naming; anoffice_agentrow's per-surface breakdown is in itsoffice_metrics). On/pluginsonlycoworkandclaude_codeoccur (the only surfaces with plugin attribution); on/artifactsonlychat,claude_code, andcoworkoccur (the surfaces that create artifacts);/apps/chat/projectsdoes not support the product dimension (aproductentry ingroup_by[]orfilter[]there is rejected). Present only when the request grouped byproduct. -
rbac_group_id: optional string or nullTagged RBAC group identifier (
rbac_group_...), matching the spend-limits API spelling. Present only when the request grouped byrbac_group_id. -
rbac_group_name: optional string or nullResolved RBAC group display name, alongside
rbac_group_idwhen name resolution is available. Null if the group has been deleted or its name could not be resolved;rbac_group_idremains the stable key. -
read_call_count: optional number or nullNumber of connector tool calls on the requested day whose trusted read-only annotation marked them read-only. Call count, not distinct users. Every call recorded on a classified surface lands in exactly one of
read_call_count,write_call_count, orunclassified_call_count, so the three sum to the day's classified calls. Classification is forward-only per surface: claude.ai from 2026-06-01, Claude Code from 2026-05-30, Claude in Office from 2026-05-29, Cowork from 2026-06-02 (Cowork clients predating annotation forwarding land inunclassified_call_count). Null, never 0, when the value cannot be stated: the read/write split is not enabled for this organization, or the day predates 2026-05-29. For a date-range total, sum the per-day values, but treat a window that extends before 2026-05-29 as null rather than summing only its covered days — date-range rollup mode (starting_date/ending_date) applies both rules server-side. -
unclassified_call_count: optional number or nullNumber of connector tool calls on the requested day with no trusted read-only annotation — the annotation is optional in the MCP spec and is discarded when connector access controls are active, so unclassified calls are common. This field shows how much of the day's classified activity the read/write split actually covers. Call count, not distinct users. One of the three call-classification buckets; see
read_call_countfor the per-surface data-start dates, null conditions, and date-range guidance. -
user_id: optional string or nullTagged user identifier (e.g.
user_...). Present only when the request grouped byuser_id. -
write_call_count: optional number or nullNumber of connector tool calls on the requested day whose trusted read-only annotation marked them not read-only. Call count, not distinct users. One of the three call-classification buckets; see
read_call_countfor the per-surface data-start dates, null conditions, and date-range guidance.
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/connectors \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"chat_metrics": {
"distinct_conversation_connector_used_count": 0
},
"claude_code_metrics": {
"distinct_session_connector_used_count": 0
},
"connector_name": "connector_name",
"cowork_metrics": {
"distinct_session_connector_used_count": 0
},
"distinct_user_count": 0,
"office_metrics": {
"excel": {
"distinct_session_connector_used_count": 0
},
"outlook": {
"distinct_session_connector_used_count": 0
},
"powerpoint": {
"distinct_session_connector_used_count": 0
},
"word": {
"distinct_session_connector_used_count": 0
}
},
"connector_display_name": "connector_display_name",
"individual_auth_distinct_user_count": 0,
"managed_auth_distinct_user_count": 0,
"product": "product",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"read_call_count": 0,
"unclassified_call_count": 0,
"user_id": "user_id",
"write_call_count": 0
}
],
"next_page": "next_page"
}Organization › Analytics › Chat Projects
Get Chat Project Usage
GET /v1/organizations/analytics/apps/chat/projects
Get per-project activity for a given day, with cursor-based pagination.
Returns activity metrics for each project in the organization, sorted by
project ID. Use group_by[] to break projects out per member or per RBAC
group, and filter[] to scope results; the parameter descriptions list the
supported dimensions. Available to organizations on a Claude Enterprise
plan. Requires an API key with the read:analytics scope.
Query parameters
-
date: optional stringUTC date in YYYY-MM-DD format. The day to get project activity for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.
format: date
-
ending_date: optional stringUTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with
starting_date. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days afterstarting_date.format: date
-
filter: optional array of stringFilters as
dimension:value, e.g.filter[]=rbac_group_id:{id}. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint:project_id,rbac_group_id,user_id. Value forms:project_idtakes a tagged project id (claude_proj_...);rbac_group_idtakes the tagged id (rbac_group_..., as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution);user_idtakes a tagged user id (user_...), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.maxItems: 100
-
group_by: optional array of "rbac_group_id" or "user_id"Dimensions to break results out by (e.g.
group_by[]=user_id). Supported on this endpoint:rbac_group_id,user_id. Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses vianext_page; an unsupported dimension returns 400.rbac_group_idattributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.maxItems: 100
-
"rbac_group_id" -
"user_id"
-
-
limit: optional numberNumber of results per page (1-1000, default 100).
minimum: 1, maximum: 1000
-
order: optional "asc" or "desc"Sort direction:
ascordesc. Defaults toascfor the endpoint's sort column and todescwhenorder_bynames a metric (a top-N ranking). Applies toorder_by, or to the endpoint's default sort field whenorder_byis omitted.-
"asc" -
"desc"
-
-
order_by: optional stringSort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
starting_date: optional stringUTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either
dateorstarting_date, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.format: date
Returns
-
BetaChatProjectUsage objectResponse for GET /v1/organizations/analytics/apps/chat/projects.
-
data: array of object-
distinct_user_count: numberNumber of distinct users who used the project on the requested day, or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values.
-
message_count: numberNumber of messages sent in the project on the requested day
-
project_id: stringTagged project identifier (e.g.
claude_proj_...) -
project_name: stringName of the project
-
created_at: optional string or nullProject creation timestamp in RFC 3339 format. Null if the project was deleted before attribution was recorded.
format: date-time
-
created_by: optional BetaAnalyticsUser or nullA user in the organization, identified by tagged id and email address.
-
type: "user"Object type. Always
user.default: user
-
id: stringTagged user identifier (e.g.
user_...) -
email_address: stringEmail address of the user
-
-
distinct_conversation_count: optional number or nullNumber of distinct conversations in the project. Null on aggregated rows where a distinct count cannot be computed.
-
product: optional string or nullProduct that produced this row's activity: one of
chat,claude_code,cowork, oroffice_agent(the canonical Cost & Usage product naming; anoffice_agentrow's per-surface breakdown is in itsoffice_metrics). On/pluginsonlycoworkandclaude_codeoccur (the only surfaces with plugin attribution); on/artifactsonlychat,claude_code, andcoworkoccur (the surfaces that create artifacts);/apps/chat/projectsdoes not support the product dimension (aproductentry ingroup_by[]orfilter[]there is rejected). Present only when the request grouped byproduct. -
rbac_group_id: optional string or nullTagged RBAC group identifier (
rbac_group_...), matching the spend-limits API spelling. Present only when the request grouped byrbac_group_id. -
rbac_group_name: optional string or nullResolved RBAC group display name, alongside
rbac_group_idwhen name resolution is available. Null if the group has been deleted or its name could not be resolved;rbac_group_idremains the stable key. -
user_id: optional string or nullTagged user identifier (e.g.
user_...). Present only when the request grouped byuser_id.
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/apps/chat/projects \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"distinct_user_count": 0,
"message_count": 0,
"project_id": "project_id",
"project_name": "project_name",
"created_at": "2019-12-27T18:11:19.117Z",
"created_by": {
"id": "id",
"email_address": "email_address",
"type": "user"
},
"distinct_conversation_count": 0,
"product": "product",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"user_id": "user_id"
}
],
"next_page": "next_page"
}Organization › Analytics › Plugins
Get Plugin Usage
GET /v1/organizations/analytics/plugins
Get per-plugin install + invocation usage for a given day, with pagination.
Returns plugin usage metrics for the organization across Cowork and Claude
Code, sorted by plugin name. The plugin_name value third-party is
an aggregate bucket, not a plugin: it collects plugin activity, from
either surface, for which the reporting client did not provide a plugin
name — so an organization's own plugins can contribute both to their own
named rows and to this bucket. Use group_by[] to break usage out per
member, per RBAC group, or per product surface (Cowork / Claude Code),
and filter[] to scope results; the parameter descriptions list the
supported dimensions. Requires an API key with the
read:analytics scope. starting_date / ending_date select
range-rollup mode like /skills.
Query parameters
-
date: optional stringUTC date in YYYY-MM-DD format. The day to get plugin usage for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.
format: date
-
ending_date: optional stringUTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with
starting_date. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days afterstarting_date.format: date
-
filter: optional array of stringFilters as
dimension:value, e.g.filter[]=rbac_group_id:{id}. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint:plugin_name,product,rbac_group_id,user_id. Value forms:plugin_namematches case-insensitively;productisclaude_codeorcowork(the only surfaces with plugin attribution);rbac_group_idtakes the tagged id (rbac_group_..., as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution);user_idtakes a tagged user id (user_...), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.maxItems: 100
-
group_by: optional array of "product" or "rbac_group_id" or "user_id"Dimensions to break results out by (e.g.
group_by[]=user_id). Supported on this endpoint:product,rbac_group_id,user_id. On this endpointproducttakes the valuesclaude_codeorcoworkonly (the surfaces with plugin attribution). Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses vianext_page; an unsupported dimension returns 400.rbac_group_idattributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.maxItems: 100
-
"product" -
"rbac_group_id" -
"user_id"
-
-
limit: optional numberNumber of results per page (1-1000, default 100).
minimum: 1, maximum: 1000
-
order: optional "asc" or "desc"Sort direction:
ascordesc. Defaults toascfor the endpoint's sort column and todescwhenorder_bynames a metric (a top-N ranking). Applies toorder_by, or to the endpoint's default sort field whenorder_byis omitted.-
"asc" -
"desc"
-
-
order_by: optional stringSort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
starting_date: optional stringUTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either
dateorstarting_date, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.format: date
Returns
-
BetaPluginUsage objectResponse for GET /v1/organizations/analytics/plugins.
-
data: array of object-
claude_code_metrics: objectClaude Code activity metrics for a single plugin on a given day.
-
distinct_session_plugin_used_count: number or nullNumber of distinct Claude Code sessions in which the plugin was invoked. Null on aggregated rows where a distinct count cannot be computed.
-
-
cowork_metrics: objectCowork activity metrics for a single plugin on a given day.
-
distinct_session_plugin_used_count: number or nullNumber of distinct Cowork sessions in which the plugin was invoked. Null on aggregated rows where a distinct count cannot be computed.
-
-
distinct_user_count: numberNumber of distinct users with recorded install or invocation activity for the plugin on the requested day (install-only users count), or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values.
-
install_count: number or nullNumber of distinct users who installed the plugin on the requested day, or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values.
-
invocation_count: numberNumber of plugin invocations on the requested day
-
plugin_name: stringName of the plugin
-
plugin_id: optional string or nullStable plugin identifier when available (e.g.
serena@claude-plugins-official). Null for third-party Claude Code plugins (redacted at the source) and Cowork slash commands that carry only a hashed id. -
product: optional string or nullProduct that produced this row's activity: one of
chat,claude_code,cowork, oroffice_agent(the canonical Cost & Usage product naming; anoffice_agentrow's per-surface breakdown is in itsoffice_metrics). On/pluginsonlycoworkandclaude_codeoccur (the only surfaces with plugin attribution); on/artifactsonlychat,claude_code, andcoworkoccur (the surfaces that create artifacts);/apps/chat/projectsdoes not support the product dimension (aproductentry ingroup_by[]orfilter[]there is rejected). Present only when the request grouped byproduct. -
rbac_group_id: optional string or nullTagged RBAC group identifier (
rbac_group_...), matching the spend-limits API spelling. Present only when the request grouped byrbac_group_id. -
rbac_group_name: optional string or nullResolved RBAC group display name, alongside
rbac_group_idwhen name resolution is available. Null if the group has been deleted or its name could not be resolved;rbac_group_idremains the stable key. -
user_id: optional string or nullTagged user identifier (e.g.
user_...). Present only when the request grouped byuser_id.
-
-
next_page: string or nullOpaque cursor for the next page, or null if no more results
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/plugins \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"claude_code_metrics": {
"distinct_session_plugin_used_count": 0
},
"cowork_metrics": {
"distinct_session_plugin_used_count": 0
},
"distinct_user_count": 0,
"install_count": 0,
"invocation_count": 0,
"plugin_name": "plugin_name",
"plugin_id": "plugin_id",
"product": "product",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"user_id": "user_id"
}
],
"next_page": "next_page"
}Organization › Analytics › Artifacts
Get Artifact Activity
GET /v1/organizations/analytics/artifacts
Get artifact-creation activity for a given day, broken out by MIME type.
Returns the full (artifact_type, is_shared) cube for the organization;
next_page is null except for grouped queries, which paginate. The cube
can be broken out per product, per member, or per RBAC group via
group_by[], and scoped via filter[]. Requires an API key with the
read:analytics scope.
Query parameters
-
date: stringUTC date in YYYY-MM-DD format. The day to get artifact activity for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.
format: date
-
filter: optional array of stringFilters as
dimension:value, e.g.filter[]=rbac_group_id:{id}. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint:artifact_type,is_shared,product,rbac_group_id,user_id. Value forms:artifact_typeis a canonical artifact MIME type (e.g.text/markdown) orother;is_sharedistrueorfalse;productischat,claude_code, orcowork(the surfaces that create artifacts);rbac_group_idtakes the tagged id (rbac_group_..., as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution);user_idtakes a tagged user id (user_...), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.maxItems: 100
-
group_by: optional array of "product" or "rbac_group_id" or "user_id"Dimensions to break results out by:
product,user_idand/orrbac_group_id. The ungrouped artifact-type cube is finite and returned in full; grouped queries multiply the cube and paginate vianext_page.producttakes the valueschat,claude_code, orcowork(the surfaces that create artifacts).rbac_group_idattributes a user to every group they held at any point during the requested UTC day, so grouped rows are not an exclusive partition. At most 100 entries.maxItems: 100
-
"product" -
"rbac_group_id" -
"user_id"
-
-
limit: optional numberMaximum rows to return (1-1000, default 100). The ungrouped artifact-type cube is finite and returned in full;
limitis the page size only whengroup_by[]multiplies the cube.minimum: 1, maximum: 1000
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. Only valid withgroup_by[]— the ungrouped cube is never paginated.
Returns
-
BetaArtifactUsage objectResponse for GET /v1/organizations/analytics/artifacts.
next_pageis null on ungrouped queries — the artifact-type cube is finite and returned in full. Grouped queries (group_by[]onproduct/user_id/rbac_group_id) multiply the cube and paginate like the other analytics list endpoints.-
data: array of object-
artifact_type: stringCanonical artifact MIME type (e.g.
text/markdown,application/vnd.ant.react,image/svg+xml), orother. Claude Code and Cowork artifacts report astext/html. -
artifacts_created_count: numberNumber of artifacts created in this bucket on the requested day
-
distinct_user_count: numberNumber of distinct users who created artifacts in this bucket on the requested day
-
is_shared: booleanWhether the artifacts in this bucket have ever been shared (a Claude Code / Cowork artifact is shared once anyone beyond its creator may open it: named members, the whole organization, or anyone with the link).
-
published_artifacts_created_count: numberNumber of those artifacts that have been published (for Claude Code / Cowork artifacts: open to anyone with the link); never exceeds
artifacts_created_count -
product: optional string or nullProduct that produced this row's activity: one of
chat,claude_code,cowork, oroffice_agent(the canonical Cost & Usage product naming; anoffice_agentrow's per-surface breakdown is in itsoffice_metrics). On/pluginsonlycoworkandclaude_codeoccur (the only surfaces with plugin attribution); on/artifactsonlychat,claude_code, andcoworkoccur (the surfaces that create artifacts);/apps/chat/projectsdoes not support the product dimension (aproductentry ingroup_by[]orfilter[]there is rejected). Present only when the request grouped byproduct. -
rbac_group_id: optional string or nullTagged RBAC group identifier (
rbac_group_...), matching the spend-limits API spelling. Present only when the request grouped byrbac_group_id. -
rbac_group_name: optional string or nullResolved RBAC group display name, alongside
rbac_group_idwhen name resolution is available. Null if the group has been deleted or its name could not be resolved;rbac_group_idremains the stable key. -
user_id: optional string or nullTagged user identifier (e.g.
user_...). Present only when the request grouped byuser_id.
-
-
next_page: string or nullCursor for the next page of a grouped query; always null for the ungrouped artifact-type cube, which is returned in full.
-
Example
curl https://api.anthropic.com/v1/organizations/analytics/artifacts \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"artifact_type": "artifact_type",
"artifacts_created_count": 0,
"distinct_user_count": 0,
"is_shared": true,
"published_artifacts_created_count": 0,
"product": "product",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"user_id": "user_id"
}
],
"next_page": "next_page"
}Organization › Spend Limits
Set Spend Limit
POST /v1/organizations/spend_limits
Set a spend limit.
Upsert keyed on (scope, period): setting a limit that already exists
overwrites it in place. A Claude Enterprise organization sets user
limits. Its seat-tier, group, and organization-level defaults are configured
in claude.ai. A Claude Console organization sets organization and
workspace limits, which are monthly and always carry an amount. Setting those
limits is in an early access preview. To request access, contact your
Anthropic account team.
Body parameters
-
amount: string or nullLimit amount as a non-negative integer decimal string in the minor unit of the organization's billing currency (cents for USD): "50000" is $500.00.
nullsets an explicit no-limit override for this scope andperiodonly — each period resolves independently, so caps for other periods still apply. -
scope: User or Organization or WorkspaceWhat the limit applies to. Claude Enterprise organizations set
userlimits. Claude Console organizations setorganizationandworkspacelimits. Any other combination returns 400. Settingorganizationandworkspacelimits through the API is in an early access preview. To request access, contact your Anthropic account team.-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
period: optional "daily" or "monthly" or "weekly"-
"daily" -
"monthly" -
"weekly"
-
Returns
-
BetaSpendLimit objectA configured spend limit: a cap on metered spend for one scope and period.
-
type: "spend_limit"Object type. Always
spend_limit.default: spend_limit
-
id: stringUnique tagged ID of the spend limit (
spl_...). -
amount: string or nullLimit amount as a non-negative integer decimal string in the minor unit of
currency(cents for USD): "50000" is $500.00.nullmeans no numeric cap is configured at this scope — see the effective report for whether a limit applies. -
created_at: stringRFC 3339 datetime at which the spend limit was created.
format: date-time
-
currency: stringISO 4217 code of the organization's billing currency; the unit for
amount. -
period: "daily" or "monthly" or "weekly"Length of the window the limit resets over.
amountcaps spend within each period.-
"daily" -
"monthly" -
"weekly"
-
-
scope: User or SeatTier or RBACGroup or 3 moreWhat the limit applies to. A tagged union on
type; each variant carries the identifier for its scope.-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
updated_at: stringRFC 3339 datetime at which the spend limit was last modified.
format: date-time
-
Example
curl https://api.anthropic.com/v1/organizations/spend_limits \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"amount": "50000",
"scope": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"period": "monthly"
}'Response (200)
{
"id": "id",
"amount": "50000",
"created_at": "2019-12-27T18:11:19.117Z",
"currency": "USD",
"period": "monthly",
"scope": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"type": "spend_limit",
"updated_at": "2019-12-27T18:11:19.117Z"
}Get Spend Limit
GET /v1/organizations/spend_limits/{spend_limit_id}
Retrieve a spend limit by ID.
Path parameters
-
spend_limit_id: stringID of the Spend Limit.
Returns
-
BetaSpendLimit objectA configured spend limit: a cap on metered spend for one scope and period.
-
type: "spend_limit"Object type. Always
spend_limit.default: spend_limit
-
id: stringUnique tagged ID of the spend limit (
spl_...). -
amount: string or nullLimit amount as a non-negative integer decimal string in the minor unit of
currency(cents for USD): "50000" is $500.00.nullmeans no numeric cap is configured at this scope — see the effective report for whether a limit applies. -
created_at: stringRFC 3339 datetime at which the spend limit was created.
format: date-time
-
currency: stringISO 4217 code of the organization's billing currency; the unit for
amount. -
period: "daily" or "monthly" or "weekly"Length of the window the limit resets over.
amountcaps spend within each period.-
"daily" -
"monthly" -
"weekly"
-
-
scope: User or SeatTier or RBACGroup or 3 moreWhat the limit applies to. A tagged union on
type; each variant carries the identifier for its scope.-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
updated_at: stringRFC 3339 datetime at which the spend limit was last modified.
format: date-time
-
Example
curl https://api.anthropic.com/v1/organizations/spend_limits/$SPEND_LIMIT_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "id",
"amount": "50000",
"created_at": "2019-12-27T18:11:19.117Z",
"currency": "USD",
"period": "monthly",
"scope": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"type": "spend_limit",
"updated_at": "2019-12-27T18:11:19.117Z"
}Delete Spend Limit
DELETE /v1/organizations/spend_limits/{spend_limit_id}
Delete a spend limit.
For a Claude Enterprise organization, this deletes a per-user override, and the member falls back to any inherited spend limit at that period. Its seat-tier, group, and organization-level rows cannot be deleted via this endpoint. A Claude Console organization deletes its organization and workspace limits. Deleting them through the API is in an early access preview.
Path parameters
-
spend_limit_id: stringID of the Spend Limit.
Returns
-
type: "spend_limit_deleted"default: spend_limit_deleted
-
id: string
Example
curl https://api.anthropic.com/v1/organizations/spend_limits/$SPEND_LIMIT_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "id",
"type": "spend_limit_deleted"
}List Effective Spend Limits
GET /v1/organizations/spend_limits/effective
List each member's effective spend limit and period-to-date spend.
Returns one row per (member, period) the member resolves a spend limit
for, with the source scope the spend limit was inherited from.
Paginates by member, so a member's periods never split across pages.
Query parameters
-
limit: optional numberMaximum number of members per page. A member's period rows never split across pages, so a page may carry more rows than this. Defaults to
20.default: 20, maximum: 1000, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_pagefield. -
period: optional array of "daily" or "monthly" or "weekly"Restrict the report to these limit periods. Omit to return one row per period each member resolves a spend limit for.
maxItems: 3
-
"daily" -
"monthly" -
"weekly"
-
-
user_ids: optional array of stringRestrict the report to these members, by tagged user ID (
user_...). At most 100 entries.maxItems: 100
Returns
-
data: array of BetaSpendSummary-
actor: UserActor or ScopedAPIKeyActor-
UserActor objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
ScopedAPIKeyActor objectA scoped Admin API key acting on behalf of the organization.
-
type: "scoped_api_key_actor"default: scoped_api_key_actor
-
scoped_api_key_id: string
-
-
-
amount: string or nullEffective limit amount as a non-negative integer decimal string in the minor unit of
currency(cents for USD).nullmeans no limit applies for this row'speriod— each period resolves independently, so another period may still cap this member. -
currency: stringISO 4217 code of the organization's billing currency; the unit for
amountandperiod_to_date_spend. -
period: "daily" or "monthly" or "weekly"Period this row's effective limit and spend are reported for.
-
"daily" -
"monthly" -
"weekly"
-
-
period_to_date_spend: stringThe member's spend so far in the current period, as a non-negative decimal string in the minor unit of
currency(cents for USD). May carry fractional minor units up to three decimal places (e.g."12050.5") — metered usage is not rounded to whole cents. Reads as"0"when the spend reading is temporarily unavailable. -
scope: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
source: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
spend_limit_id: string
-
-
next_page: string or null
Example
curl https://api.anthropic.com/v1/organizations/spend_limits/effective \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"actor": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"amount": "50000",
"currency": "USD",
"period": "monthly",
"period_to_date_spend": "12050.5",
"scope": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"source": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"spend_limit_id": "spend_limit_id"
}
],
"next_page": "next_page"
}Organization › Spend Limits › Increase Requests
List Spend Limit Increase Requests
GET /v1/organizations/spend_limit_increase_requests
List spend limit increase requests, most recent first.
Pending requests include a live spend_summary for the requester.
Requests whose requester is no longer a member are excluded.
Query parameters
-
actor_ids: optional array of stringFilter by requester, as
user_...tagged IDs. -
limit: optional numberdefault: 20, maximum: 1000, minimum: 1
-
page: optional stringOpaque cursor from a previous response's
next_page. -
status: optional array of "approved" or "denied" or "pending"Filter by status. Omit to return all.
-
"approved" -
"denied" -
"pending"
-
Returns
-
data: array of BetaSpendLimitIncreaseRequest-
type: "spend_limit_increase_request"default: spend_limit_increase_request
-
id: string -
actor: objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
created_at: stringformat: date-time
-
period: "daily" or "monthly" or "weekly"-
"daily" -
"monthly" -
"weekly"
-
-
resolved_at: string or nullformat: date-time
-
resolved_by: UserActor or ScopedAPIKeyActor or null-
UserActor objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
ScopedAPIKeyActor objectA scoped Admin API key acting on behalf of the organization.
-
type: "scoped_api_key_actor"default: scoped_api_key_actor
-
scoped_api_key_id: string
-
-
-
spend_summary: BetaSpendSummary or nullPer-member effective-limit report row (
GET /spend_limits/effective).-
actor: UserActor or ScopedAPIKeyActor-
UserActor objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
ScopedAPIKeyActor objectA scoped Admin API key acting on behalf of the organization.
-
type: "scoped_api_key_actor"default: scoped_api_key_actor
-
scoped_api_key_id: string
-
-
-
amount: string or nullEffective limit amount as a non-negative integer decimal string in the minor unit of
currency(cents for USD).nullmeans no limit applies for this row'speriod— each period resolves independently, so another period may still cap this member. -
currency: stringISO 4217 code of the organization's billing currency; the unit for
amountandperiod_to_date_spend. -
period: "daily" or "monthly" or "weekly"Period this row's effective limit and spend are reported for.
-
"daily" -
"monthly" -
"weekly"
-
-
period_to_date_spend: stringThe member's spend so far in the current period, as a non-negative decimal string in the minor unit of
currency(cents for USD). May carry fractional minor units up to three decimal places (e.g."12050.5") — metered usage is not rounded to whole cents. Reads as"0"when the spend reading is temporarily unavailable. -
scope: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
source: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
spend_limit_id: string
-
-
status: "approved" or "denied" or "pending"-
"approved" -
"denied" -
"pending"
-
-
-
next_page: string or null
Example
curl https://api.anthropic.com/v1/organizations/spend_limit_increase_requests \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "id",
"actor": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"created_at": "2019-12-27T18:11:19.117Z",
"period": "monthly",
"resolved_at": "2019-12-27T18:11:19.117Z",
"resolved_by": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"spend_summary": {
"actor": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"amount": "50000",
"currency": "USD",
"period": "monthly",
"period_to_date_spend": "12050.5",
"scope": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"source": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"spend_limit_id": "spend_limit_id"
},
"status": "approved",
"type": "spend_limit_increase_request"
}
],
"next_page": "next_page"
}Get Spend Limit Increase Request
GET /v1/organizations/spend_limit_increase_requests/{spend_limit_increase_request_id}
Retrieve a spend limit increase request.
While pending, the response includes a live spend_summary for the
requester at the request's period.
Path parameters
-
spend_limit_increase_request_id: stringID of the spend limit increase request.
Returns
-
BetaSpendLimitIncreaseRequest object-
type: "spend_limit_increase_request"default: spend_limit_increase_request
-
id: string -
actor: objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
created_at: stringformat: date-time
-
period: "daily" or "monthly" or "weekly"-
"daily" -
"monthly" -
"weekly"
-
-
resolved_at: string or nullformat: date-time
-
resolved_by: UserActor or ScopedAPIKeyActor or null-
UserActor objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
ScopedAPIKeyActor objectA scoped Admin API key acting on behalf of the organization.
-
type: "scoped_api_key_actor"default: scoped_api_key_actor
-
scoped_api_key_id: string
-
-
-
spend_summary: BetaSpendSummary or nullPer-member effective-limit report row (
GET /spend_limits/effective).-
actor: UserActor or ScopedAPIKeyActor-
UserActor objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
ScopedAPIKeyActor objectA scoped Admin API key acting on behalf of the organization.
-
type: "scoped_api_key_actor"default: scoped_api_key_actor
-
scoped_api_key_id: string
-
-
-
amount: string or nullEffective limit amount as a non-negative integer decimal string in the minor unit of
currency(cents for USD).nullmeans no limit applies for this row'speriod— each period resolves independently, so another period may still cap this member. -
currency: stringISO 4217 code of the organization's billing currency; the unit for
amountandperiod_to_date_spend. -
period: "daily" or "monthly" or "weekly"Period this row's effective limit and spend are reported for.
-
"daily" -
"monthly" -
"weekly"
-
-
period_to_date_spend: stringThe member's spend so far in the current period, as a non-negative decimal string in the minor unit of
currency(cents for USD). May carry fractional minor units up to three decimal places (e.g."12050.5") — metered usage is not rounded to whole cents. Reads as"0"when the spend reading is temporarily unavailable. -
scope: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
source: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
spend_limit_id: string
-
-
status: "approved" or "denied" or "pending"-
"approved" -
"denied" -
"pending"
-
-
Example
curl https://api.anthropic.com/v1/organizations/spend_limit_increase_requests/$SPEND_LIMIT_INCREASE_REQUEST_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "id",
"actor": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"created_at": "2019-12-27T18:11:19.117Z",
"period": "monthly",
"resolved_at": "2019-12-27T18:11:19.117Z",
"resolved_by": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"spend_summary": {
"actor": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"amount": "50000",
"currency": "USD",
"period": "monthly",
"period_to_date_spend": "12050.5",
"scope": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"source": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"spend_limit_id": "spend_limit_id"
},
"status": "approved",
"type": "spend_limit_increase_request"
}Approve Spend Limit Increase Request
POST /v1/organizations/spend_limit_increase_requests/{spend_limit_increase_request_id}/approve
Approve a pending spend limit increase request.
Writes a per-user spend limit at amount for the requester and
transitions the request to approved. period defaults to the period
the member was blocked on. Anthropic emails the requester unless
suppress_notification is set.
Path parameters
-
spend_limit_increase_request_id: stringID of the spend limit increase request.
Body parameters
-
amount: stringNew per-user spend limit as a non-negative integer decimal string (minor units).
-
period: optional "daily" or "monthly" or "weekly" or null-
"daily" -
"monthly" -
"weekly"
-
-
suppress_notification: optional boolean
Returns
-
type: "spend_limit_increase_request"default: spend_limit_increase_request
-
id: string -
actor: objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
created_at: stringformat: date-time
-
period: "daily" or "monthly" or "weekly"-
"daily" -
"monthly" -
"weekly"
-
-
resolved_at: string or nullformat: date-time
-
resolved_by: UserActor or ScopedAPIKeyActor or null-
UserActor objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
ScopedAPIKeyActor objectA scoped Admin API key acting on behalf of the organization.
-
type: "scoped_api_key_actor"default: scoped_api_key_actor
-
scoped_api_key_id: string
-
-
-
spend_limit: BetaSpendLimitA configured spend limit: a cap on metered spend for one scope and period.
-
type: "spend_limit"Object type. Always
spend_limit.default: spend_limit
-
id: stringUnique tagged ID of the spend limit (
spl_...). -
amount: string or nullLimit amount as a non-negative integer decimal string in the minor unit of
currency(cents for USD): "50000" is $500.00.nullmeans no numeric cap is configured at this scope — see the effective report for whether a limit applies. -
created_at: stringRFC 3339 datetime at which the spend limit was created.
format: date-time
-
currency: stringISO 4217 code of the organization's billing currency; the unit for
amount. -
period: "daily" or "monthly" or "weekly"Length of the window the limit resets over.
amountcaps spend within each period.-
"daily" -
"monthly" -
"weekly"
-
-
scope: User or SeatTier or RBACGroup or 3 moreWhat the limit applies to. A tagged union on
type; each variant carries the identifier for its scope.-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
updated_at: stringRFC 3339 datetime at which the spend limit was last modified.
format: date-time
-
-
spend_summary: BetaSpendSummary or nullPer-member effective-limit report row (
GET /spend_limits/effective).-
actor: UserActor or ScopedAPIKeyActor-
UserActor objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
ScopedAPIKeyActor objectA scoped Admin API key acting on behalf of the organization.
-
type: "scoped_api_key_actor"default: scoped_api_key_actor
-
scoped_api_key_id: string
-
-
-
amount: string or nullEffective limit amount as a non-negative integer decimal string in the minor unit of
currency(cents for USD).nullmeans no limit applies for this row'speriod— each period resolves independently, so another period may still cap this member. -
currency: stringISO 4217 code of the organization's billing currency; the unit for
amountandperiod_to_date_spend. -
period: "daily" or "monthly" or "weekly"Period this row's effective limit and spend are reported for.
-
"daily" -
"monthly" -
"weekly"
-
-
period_to_date_spend: stringThe member's spend so far in the current period, as a non-negative decimal string in the minor unit of
currency(cents for USD). May carry fractional minor units up to three decimal places (e.g."12050.5") — metered usage is not rounded to whole cents. Reads as"0"when the spend reading is temporarily unavailable. -
scope: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
source: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
spend_limit_id: string
-
-
status: "approved" or "denied" or "pending"-
"approved" -
"denied" -
"pending"
-
Example
curl https://api.anthropic.com/v1/organizations/spend_limit_increase_requests/$SPEND_LIMIT_INCREASE_REQUEST_ID/approve \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"amount": "50000",
"period": "monthly"
}'Response (200)
{
"id": "id",
"actor": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"created_at": "2019-12-27T18:11:19.117Z",
"period": "monthly",
"resolved_at": "2019-12-27T18:11:19.117Z",
"resolved_by": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"spend_limit": {
"id": "id",
"amount": "50000",
"created_at": "2019-12-27T18:11:19.117Z",
"currency": "USD",
"period": "monthly",
"scope": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"type": "spend_limit",
"updated_at": "2019-12-27T18:11:19.117Z"
},
"spend_summary": {
"actor": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"amount": "50000",
"currency": "USD",
"period": "monthly",
"period_to_date_spend": "12050.5",
"scope": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"source": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"spend_limit_id": "spend_limit_id"
},
"status": "approved",
"type": "spend_limit_increase_request"
}Deny Spend Limit Increase Request
POST /v1/organizations/spend_limit_increase_requests/{spend_limit_increase_request_id}/deny
Deny a pending spend limit increase request.
Idempotent on denied; denying an already-approved request returns
400. Anthropic emails the requester unless suppress_notification is set.
Path parameters
-
spend_limit_increase_request_id: stringID of the spend limit increase request.
Body parameters
suppress_notification: optional boolean
Returns
-
BetaSpendLimitIncreaseRequest object-
type: "spend_limit_increase_request"default: spend_limit_increase_request
-
id: string -
actor: objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
created_at: stringformat: date-time
-
period: "daily" or "monthly" or "weekly"-
"daily" -
"monthly" -
"weekly"
-
-
resolved_at: string or nullformat: date-time
-
resolved_by: UserActor or ScopedAPIKeyActor or null-
UserActor objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
ScopedAPIKeyActor objectA scoped Admin API key acting on behalf of the organization.
-
type: "scoped_api_key_actor"default: scoped_api_key_actor
-
scoped_api_key_id: string
-
-
-
spend_summary: BetaSpendSummary or nullPer-member effective-limit report row (
GET /spend_limits/effective).-
actor: UserActor or ScopedAPIKeyActor-
UserActor objectA user within the organization.
nameandemail_addressare null when the underlying account is unavailable or has been deleted;deletedis true only for deleted accounts.-
type: "user_actor"Actor type. Always
user_actor.default: user_actor
-
deleted: booleanTrue only when the underlying account has been deleted.
default: false
-
email_address: string or nullThe user's email address. Null when the account is unavailable or has been deleted.
-
name: string or nullThe user's current display name. Null when the account is unavailable, has been deleted, or has no name set.
-
user_id: stringTagged ID of the user.
-
-
ScopedAPIKeyActor objectA scoped Admin API key acting on behalf of the organization.
-
type: "scoped_api_key_actor"default: scoped_api_key_actor
-
scoped_api_key_id: string
-
-
-
amount: string or nullEffective limit amount as a non-negative integer decimal string in the minor unit of
currency(cents for USD).nullmeans no limit applies for this row'speriod— each period resolves independently, so another period may still cap this member. -
currency: stringISO 4217 code of the organization's billing currency; the unit for
amountandperiod_to_date_spend. -
period: "daily" or "monthly" or "weekly"Period this row's effective limit and spend are reported for.
-
"daily" -
"monthly" -
"weekly"
-
-
period_to_date_spend: stringThe member's spend so far in the current period, as a non-negative decimal string in the minor unit of
currency(cents for USD). May carry fractional minor units up to three decimal places (e.g."12050.5") — metered usage is not rounded to whole cents. Reads as"0"when the spend reading is temporarily unavailable. -
scope: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
source: User or SeatTier or RBACGroup or 3 more-
User objectScope selecting a single member of the organization.
-
type: "user"Scope type. Always
userfor this scope.default: user
-
user_id: stringTagged ID of the member the spend limit applies to.
-
-
SeatTier object-
type: "seat_tier"default: seat_tier
-
seat_tier: string
-
-
RBACGroup object-
type: "rbac_group"default: rbac_group
-
rbac_group_id: string
-
-
OrganizationService object-
type: "organization_service"default: organization_service
-
service: string
-
-
Organization object-
type: "organization"default: organization
-
-
Workspace objectScope selecting one workspace of a Claude Console organization.
-
type: "workspace"Scope type. Always
workspacefor this scope.default: workspace
-
workspace_id: stringTagged ID of the workspace the spend limit applies to.
-
-
-
spend_limit_id: string
-
-
status: "approved" or "denied" or "pending"-
"approved" -
"denied" -
"pending"
-
-
Example
curl https://api.anthropic.com/v1/organizations/spend_limit_increase_requests/$SPEND_LIMIT_INCREASE_REQUEST_ID/deny \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{}'Response (200)
{
"id": "id",
"actor": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"created_at": "2019-12-27T18:11:19.117Z",
"period": "monthly",
"resolved_at": "2019-12-27T18:11:19.117Z",
"resolved_by": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"spend_summary": {
"actor": {
"deleted": true,
"email_address": "email_address",
"name": "name",
"type": "user_actor",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"amount": "50000",
"currency": "USD",
"period": "monthly",
"period_to_date_spend": "12050.5",
"scope": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"source": {
"type": "user",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
},
"spend_limit_id": "spend_limit_id"
},
"status": "approved",
"type": "spend_limit_increase_request"
}Organization › RBAC Groups
List RBAC Groups
GET /v1/organizations/rbac_groups
List RBAC Groups in the Claude Enterprise tenant.
The RBAC Groups API is available to Claude Enterprise organizations only.
Query parameters
-
limit: optional numberNumber of items to return per page.
Defaults to
20. Ranges from1to1000.default: 20, maximum: 1000, minimum: 1
-
page: optional stringOptionally set to the
next_pagetoken from the previous response.
Returns
-
data: array of BetaRBACGroup-
type: "rbac_group"Object type.
For RBAC Groups, this is always
"rbac_group".default: rbac_group
-
id: stringID of the RBAC Group.
-
created_at: stringRFC 3339 timestamp of when the RBAC Group was created.
format: date-time
-
name: stringName of the RBAC Group. Not uniqueness-enforced.
-
roles: array of string or nullRBAC Role IDs attached to this RBAC Group. Role attachment is managed in the admin settings and is read-only on this API.
nullmeans role data was temporarily unavailable — retry to distinguish from an empty list. -
source_type: "direct" or "scim"How the RBAC Group was created:
"direct"for groups created directly (for example, in the organization's admin settings),"scim"for groups provisioned by the identity provider.-
"direct" -
"scim"
-
-
updated_at: stringRFC 3339 timestamp of when the RBAC Group was last updated.
format: date-time
-
-
has_more: booleanIndicates if there are more results in the requested page direction.
-
next_page: string or nullToken to provide in as
pagein the subsequent request to retrieve the next page of data.
Example
curl https://api.anthropic.com/v1/organizations/rbac_groups \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"created_at": "2024-10-30T23:58:27.427722Z",
"name": "Engineering",
"roles": [
"rbac_role_016J8xVtKpDq3Wy9ZmN2hR4s"
],
"source_type": "direct",
"type": "rbac_group",
"updated_at": "2024-10-30T23:58:27.427722Z"
}
],
"has_more": false,
"next_page": "eyJjdXJzb3IiOiAicmJhY19ncm91cF8wMSJ9"
}Get RBAC Group
GET /v1/organizations/rbac_groups/{group_id}
Retrieve an RBAC Group by ID.
The RBAC Groups API is available to Claude Enterprise organizations only.
Path parameters
-
group_id: stringID of the RBAC Group.
Returns
-
BetaRBACGroup object-
type: "rbac_group"Object type.
For RBAC Groups, this is always
"rbac_group".default: rbac_group
-
id: stringID of the RBAC Group.
-
created_at: stringRFC 3339 timestamp of when the RBAC Group was created.
format: date-time
-
name: stringName of the RBAC Group. Not uniqueness-enforced.
-
roles: array of string or nullRBAC Role IDs attached to this RBAC Group. Role attachment is managed in the admin settings and is read-only on this API.
nullmeans role data was temporarily unavailable — retry to distinguish from an empty list. -
source_type: "direct" or "scim"How the RBAC Group was created:
"direct"for groups created directly (for example, in the organization's admin settings),"scim"for groups provisioned by the identity provider.-
"direct" -
"scim"
-
-
updated_at: stringRFC 3339 timestamp of when the RBAC Group was last updated.
format: date-time
-
Example
curl https://api.anthropic.com/v1/organizations/rbac_groups/$GROUP_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"created_at": "2024-10-30T23:58:27.427722Z",
"name": "Engineering",
"roles": [
"rbac_role_016J8xVtKpDq3Wy9ZmN2hR4s"
],
"source_type": "direct",
"type": "rbac_group",
"updated_at": "2024-10-30T23:58:27.427722Z"
}Create RBAC Group
POST /v1/organizations/rbac_groups
Create an RBAC Group in the Claude Enterprise tenant. Groups created via the API have source type "direct".
The RBAC Groups API is available to Claude Enterprise organizations only.
Body parameters
-
name: stringName of the RBAC Group. Not uniqueness-enforced.
maxLength: 255, minLength: 1
Returns
-
BetaRBACGroup object-
type: "rbac_group"Object type.
For RBAC Groups, this is always
"rbac_group".default: rbac_group
-
id: stringID of the RBAC Group.
-
created_at: stringRFC 3339 timestamp of when the RBAC Group was created.
format: date-time
-
name: stringName of the RBAC Group. Not uniqueness-enforced.
-
roles: array of string or nullRBAC Role IDs attached to this RBAC Group. Role attachment is managed in the admin settings and is read-only on this API.
nullmeans role data was temporarily unavailable — retry to distinguish from an empty list. -
source_type: "direct" or "scim"How the RBAC Group was created:
"direct"for groups created directly (for example, in the organization's admin settings),"scim"for groups provisioned by the identity provider.-
"direct" -
"scim"
-
-
updated_at: stringRFC 3339 timestamp of when the RBAC Group was last updated.
format: date-time
-
Example
curl https://api.anthropic.com/v1/organizations/rbac_groups \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"name": "Engineering"
}'Response (200)
{
"id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"created_at": "2024-10-30T23:58:27.427722Z",
"name": "Engineering",
"roles": [
"rbac_role_016J8xVtKpDq3Wy9ZmN2hR4s"
],
"source_type": "direct",
"type": "rbac_group",
"updated_at": "2024-10-30T23:58:27.427722Z"
}Update RBAC Group
POST /v1/organizations/rbac_groups/{group_id}
Update an RBAC Group's name. Groups provisioned by an identity provider (source type "scim") cannot be modified via the API while an organization in the tenant uses SCIM provisioning.
The RBAC Groups API is available to Claude Enterprise organizations only.
Path parameters
-
group_id: stringID of the RBAC Group.
Body parameters
-
name: optional string or nullName of the RBAC Group. Not uniqueness-enforced.
maxLength: 255, minLength: 1
Returns
-
BetaRBACGroup object-
type: "rbac_group"Object type.
For RBAC Groups, this is always
"rbac_group".default: rbac_group
-
id: stringID of the RBAC Group.
-
created_at: stringRFC 3339 timestamp of when the RBAC Group was created.
format: date-time
-
name: stringName of the RBAC Group. Not uniqueness-enforced.
-
roles: array of string or nullRBAC Role IDs attached to this RBAC Group. Role attachment is managed in the admin settings and is read-only on this API.
nullmeans role data was temporarily unavailable — retry to distinguish from an empty list. -
source_type: "direct" or "scim"How the RBAC Group was created:
"direct"for groups created directly (for example, in the organization's admin settings),"scim"for groups provisioned by the identity provider.-
"direct" -
"scim"
-
-
updated_at: stringRFC 3339 timestamp of when the RBAC Group was last updated.
format: date-time
-
Example
curl https://api.anthropic.com/v1/organizations/rbac_groups/$GROUP_ID \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"name": "Engineering"
}'Response (200)
{
"id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"created_at": "2024-10-30T23:58:27.427722Z",
"name": "Engineering",
"roles": [
"rbac_role_016J8xVtKpDq3Wy9ZmN2hR4s"
],
"source_type": "direct",
"type": "rbac_group",
"updated_at": "2024-10-30T23:58:27.427722Z"
}Delete RBAC Group
DELETE /v1/organizations/rbac_groups/{group_id}
Delete an RBAC Group. Groups provisioned by an identity provider (source type "scim") cannot be deleted via the API while an organization in the tenant uses SCIM provisioning.
The RBAC Groups API is available to Claude Enterprise organizations only.
Path parameters
-
group_id: stringID of the RBAC Group.
Returns
-
BetaRBACGroupDeleted object-
type: "rbac_group_deleted"Deleted object type.
For RBAC Groups, this is always
"rbac_group_deleted".default: rbac_group_deleted
-
id: stringID of the RBAC Group.
-
Example
curl https://api.anthropic.com/v1/organizations/rbac_groups/$GROUP_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"type": "rbac_group_deleted"
}Organization › RBAC Groups › Members
List RBAC Group Members
GET /v1/organizations/rbac_groups/{group_id}/members
List members of an RBAC Group.
The RBAC Groups API is available to Claude Enterprise organizations only.
Path parameters
-
group_id: stringID of the RBAC Group.
Query parameters
-
limit: optional numberNumber of items to return per page.
Defaults to
20. Ranges from1to1000.default: 20, maximum: 1000, minimum: 1
-
page: optional stringOptionally set to the
next_pagetoken from the previous response.
Returns
-
data: array of BetaRBACGroupMember-
type: "rbac_group_member"Object type.
For RBAC Group Members, this is always
"rbac_group_member".default: rbac_group_member
-
created_at: stringRFC 3339 timestamp of when the User was added to the RBAC Group.
format: date-time
-
email: stringEmail of the User.
-
group_id: stringID of the RBAC Group.
-
user_id: stringID of the User.
-
-
has_more: booleanIndicates if there are more results in the requested page direction.
-
next_page: string or nullToken to provide in as
pagein the subsequent request to retrieve the next page of data.
Example
curl https://api.anthropic.com/v1/organizations/rbac_groups/$GROUP_ID/members \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"created_at": "2024-10-30T23:58:27.427722Z",
"email": "user@emaildomain.com",
"group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"type": "rbac_group_member",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
}
],
"has_more": false,
"next_page": "eyJjdXJzb3IiOiAicmJhY19ncm91cF8wMSJ9"
}Add RBAC Group Member
POST /v1/organizations/rbac_groups/{group_id}/members
Add a User to an RBAC Group. Membership of groups provisioned by an identity provider (source type "scim") cannot be modified via the API while an organization in the tenant uses SCIM provisioning.
The RBAC Groups API is available to Claude Enterprise organizations only.
Path parameters
-
group_id: stringID of the RBAC Group.
Body parameters
-
user_id: stringID of the User.
Returns
-
BetaRBACGroupMember object-
type: "rbac_group_member"Object type.
For RBAC Group Members, this is always
"rbac_group_member".default: rbac_group_member
-
created_at: stringRFC 3339 timestamp of when the User was added to the RBAC Group.
format: date-time
-
email: stringEmail of the User.
-
group_id: stringID of the RBAC Group.
-
user_id: stringID of the User.
-
Example
curl https://api.anthropic.com/v1/organizations/rbac_groups/$GROUP_ID/members \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY" \
-d '{
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
}'Response (200)
{
"created_at": "2024-10-30T23:58:27.427722Z",
"email": "user@emaildomain.com",
"group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"type": "rbac_group_member",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
}Remove RBAC Group Member
DELETE /v1/organizations/rbac_groups/{group_id}/members/{user_id}
Remove a User from an RBAC Group. Membership of groups provisioned by an identity provider (source type "scim") cannot be modified via the API while an organization in the tenant uses SCIM provisioning.
The RBAC Groups API is available to Claude Enterprise organizations only.
Path parameters
-
group_id: stringID of the RBAC Group.
-
user_id: stringID of the User.
Returns
-
BetaRBACGroupMemberDeleted object-
type: "rbac_group_member_deleted"Deleted object type. For RBAC Group Members, this is always
"rbac_group_member_deleted".default: rbac_group_member_deleted
-
group_id: stringID of the RBAC Group.
-
user_id: stringID of the User.
-
Example
curl https://api.anthropic.com/v1/organizations/rbac_groups/$GROUP_ID/members/$USER_ID \
-X DELETE \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
"type": "rbac_group_member_deleted",
"user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
}Organization › RBAC Roles
List RBAC Roles
GET /v1/organizations/rbac_roles
List RBAC Roles in the organization.
The RBAC Roles API is available to Claude Enterprise organizations only.
Query parameters
-
limit: optional numberNumber of items to return per page.
Defaults to
20. Ranges from1to1000.default: 20, maximum: 1000, minimum: 1
-
page: optional stringOptionally set to the
next_pagetoken from the previous response.
Returns
-
data: array of BetaRBACRole-
type: "rbac_role"Object type.
For RBAC Roles, this is always
"rbac_role".default: rbac_role
-
id: stringID of the RBAC Role.
-
created_at: stringRFC 3339 datetime string indicating when the RBAC Role was created.
format: date-time
-
name: stringName of the RBAC Role.
-
updated_at: stringRFC 3339 datetime string indicating when the RBAC Role was last updated.
format: date-time
-
-
has_more: booleanIndicates whether there are more results beyond this page.
-
next_page: string or nullOpaque cursor for the next page. Pass as the
pageparameter on the next request.
Example
curl https://api.anthropic.com/v1/organizations/rbac_roles \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"id": "rbac_role_016J8xVtKpDq3Wy9ZmN2hR4s",
"created_at": "2024-10-30T23:58:27.427722Z",
"name": "Project Editor",
"type": "rbac_role",
"updated_at": "2024-10-30T23:58:27.427722Z"
}
],
"has_more": true,
"next_page": "eyJjdXJzb3IiOiAicmJhY19yb2xlXzAxIn0"
}Get RBAC Role
GET /v1/organizations/rbac_roles/{role_id}
Retrieve an RBAC Role by ID.
The RBAC Roles API is available to Claude Enterprise organizations only.
Path parameters
-
role_id: stringID of the RBAC Role.
Returns
-
BetaRBACRole object-
type: "rbac_role"Object type.
For RBAC Roles, this is always
"rbac_role".default: rbac_role
-
id: stringID of the RBAC Role.
-
created_at: stringRFC 3339 datetime string indicating when the RBAC Role was created.
format: date-time
-
name: stringName of the RBAC Role.
-
updated_at: stringRFC 3339 datetime string indicating when the RBAC Role was last updated.
format: date-time
-
Example
curl https://api.anthropic.com/v1/organizations/rbac_roles/$ROLE_ID \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"id": "rbac_role_016J8xVtKpDq3Wy9ZmN2hR4s",
"created_at": "2024-10-30T23:58:27.427722Z",
"name": "Project Editor",
"type": "rbac_role",
"updated_at": "2024-10-30T23:58:27.427722Z"
}Organization › RBAC Roles › Permissions
List RBAC Role Permissions
GET /v1/organizations/rbac_roles/{role_id}/permissions
List the permissions an RBAC Role grants.
The RBAC Roles API is available to Claude Enterprise organizations only.
Path parameters
-
role_id: stringID of the RBAC Role.
Query parameters
-
limit: optional numberNumber of items to return per page.
Defaults to
20. Ranges from1to1000.default: 20, maximum: 1000, minimum: 1
-
page: optional stringOptionally set to the
next_pagetoken from the previous response.
Returns
-
data: array of BetaRBACRolePermission-
type: "rbac_role_permission"Object type.
For RBAC Role Permissions, this is always
"rbac_role_permission".default: rbac_role_permission
-
action: stringAction the permission grants on the resource.
The vocabulary follows the resource: an
organizationgrant carries a product-feature entitlement (for examplechat), an admin-panel permission entitlement (permission_*), or a blanket capability-access mode —capability_access_allgrants every product-feature entitlement, andcapability_access_all_gagrants the generally-available subset as it stands at permission-check time; neither mode grants model-access entitlements. A consumer enumerating a role's per-feature grants should treat a blanket row as granting every product-feature entitlement it covers, or it will under-report the role's effective access. Aconnector_toolgrant carries a tool-access action (useoralways_allow); aconnector_scopegrant carries the scope actiongrant(the role may receive the named OAuth scope when tokens are minted for the connector);connectorandall_connectorsgrants carry a tool-access action, the scope action, or an authentication-method action (interactiveormanaged). -
resource: Organization or ConnectorTool or ConnectorScope or 2 moreWhat the permission applies to.
A tagged union:
typenames the kind of resource and determines which identifier fields are present.-
Organization object-
type: "organization"Kind of resource the permission applies to.
default: organization
-
organization_id: stringUUID of the organization the permission applies to.
-
-
ConnectorTool object-
type: "connector_tool"Kind of resource the permission applies to.
default: connector_tool
-
connector_id: stringID of the connector the permission applies to.
-
tool_name: stringPublished name of the connector tool the permission applies to.
When the published name contains characters outside
[a-zA-Z0-9_-](or collides with a reserved form), it is server-encoded into a stable{prefix}_{32-hex}form — a shortened readable prefix of the name plus a hash — from which the published name is not recoverable.
-
-
ConnectorScope object-
type: "connector_scope"Kind of resource the permission applies to.
default: connector_scope
-
connector_id: stringID of the connector the permission applies to.
-
scope: stringOAuth scope the permission names — the role may receive this scope when tokens are minted for the connector.
Subject to the same encoding rule as
tool_name: a scope containing characters outside[a-zA-Z0-9_-](or colliding with a reserved form) appears server-encoded in a stable{prefix}_{32-hex}form. OAuth scopes routinely contain:and/, so most appear encoded.
-
-
Connector object-
type: "connector"Kind of resource the permission applies to.
default: connector
-
connector_id: stringID of the connector the permission applies to.
-
-
AllConnectors object-
type: "all_connectors"Kind of resource the permission applies to.
default: all_connectors
-
-
-
-
has_more: booleanIndicates whether there are more results beyond this page.
-
next_page: string or nullOpaque cursor for the next page. Pass as the
pageparameter on the next request.
Example
curl https://api.anthropic.com/v1/organizations/rbac_roles/$ROLE_ID/permissions \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"Response (200)
{
"data": [
{
"action": "use",
"resource": {
"organization_id": "3c4f5e6d-7a8b-49c0-9d1e-2f3a4b5c6d7e",
"type": "organization"
},
"type": "rbac_role_permission"
}
],
"has_more": true,
"next_page": "eyJjdXJzb3IiOiAicmJhY19yb2xlXzAxIn0"
}