---
title: Workspaces
url: https://platform.claude.com/docs/en/api/go/organization/federation/rules/workspaces
---

# Workspaces

## Add Federation Rule Workspace

`client.Organization.Federation.Rules.Workspaces.Add(ctx, federationRuleID, body) (*FederationRuleWorkspace, error)`

**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](https://platform.claude.com/docs/en/manage-claude/wif-admin-api?sdk_languages=go).

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.

### Parameters

- `federationRuleID string` (path parameter)

  ID of the federation rule.

- `body OrganizationFederationRuleWorkspaceAddParams`

  - `WorkspaceID string`

    Tagged ID of the workspace to enable this rule for.

### Returns

- `type FederationRuleWorkspace`

  - `Type FederationRuleWorkspace`

    default: federation_rule_workspace

  - `CreatedAt Time`

    When this workspace was enabled for the rule.

    format: date-time

  - `CreatedByActorID string`

    Tagged ID (`user_...` or `svac_...`) of the actor that enabled this workspace for the rule, if known.

  - `FederationRuleID string`

    Tagged ID of the federation rule.

  - `WorkspaceID string`

    Tagged ID of the workspace this rule is enabled for.

  - `WorkspaceName string`

    Workspace display name. Populated when listing; null in the enable response.

### Example

```go
package main

import (
	"context"
	"fmt"

	"github.com/anthropics/anthropic-sdk-go"
	"github.com/anthropics/anthropic-sdk-go/option"
)

func main() {
	client := anthropic.NewClient(
		option.WithAPIKey("my-anthropic-api-key"),
	)
	federationRuleWorkspace, err := client.Organization.Federation.Rules.Workspaces.Add(
		context.TODO(),
		"federation_rule_id",
		anthropic.OrganizationFederationRuleWorkspaceAddParams{
			WorkspaceID: "workspace_id",
		},
	)
	if err != nil {
		panic(err.Error())
	}
	fmt.Printf("%+v\n", federationRuleWorkspace.CreatedByActorID)
}
```

#### Response (200)

```json
{
  "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

`client.Organization.Federation.Rules.Workspaces.List(ctx, federationRuleID, query) (*PageCursor[FederationRuleWorkspace], error)`

**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](https://platform.claude.com/docs/en/manage-claude/wif-admin-api?sdk_languages=go).

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.

### Parameters

- `federationRuleID string` (path parameter)

  ID of the federation rule.

- `query OrganizationFederationRuleWorkspaceListParams`

  - `Limit param.Opt[int64] Optional` (query parameter)

    Number of results per page.

    minimum: 1, maximum: 100

  - `Page param.Opt[string] Optional` (query parameter)

    Opaque cursor from a previous response's `next_page`.

### Returns

- `type FederationRuleWorkspace`

  - `Type FederationRuleWorkspace`

    default: federation_rule_workspace

  - `CreatedAt Time`

    When this workspace was enabled for the rule.

    format: date-time

  - `CreatedByActorID string`

    Tagged ID (`user_...` or `svac_...`) of the actor that enabled this workspace for the rule, if known.

  - `FederationRuleID string`

    Tagged ID of the federation rule.

  - `WorkspaceID string`

    Tagged ID of the workspace this rule is enabled for.

  - `WorkspaceName string`

    Workspace display name. Populated when listing; null in the enable response.

### Example

```go
package main

import (
	"context"
	"fmt"

	"github.com/anthropics/anthropic-sdk-go"
	"github.com/anthropics/anthropic-sdk-go/option"
)

func main() {
	client := anthropic.NewClient(
		option.WithAPIKey("my-anthropic-api-key"),
	)
	page, err := client.Organization.Federation.Rules.Workspaces.List(
		context.TODO(),
		"federation_rule_id",
		anthropic.OrganizationFederationRuleWorkspaceListParams{},
	)
	if err != nil {
		panic(err.Error())
	}
	fmt.Printf("%+v\n", page)
}
```

#### Response (200)

```json
{
  "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

`client.Organization.Federation.Rules.Workspaces.Remove(ctx, workspaceID, body) (*OrganizationFederationRuleWorkspaceRemoveResponse, error)`

**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](https://platform.claude.com/docs/en/manage-claude/wif-admin-api?sdk_languages=go).

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.

### Parameters

- `workspaceID string` (path parameter)

  ID of the workspace to disable for.

- `body OrganizationFederationRuleWorkspaceRemoveParams`

  - `FederationRuleID string` (path parameter)

    ID of the federation rule.

### Returns

- `type OrganizationFederationRuleWorkspaceRemoveResponse`

  - `Type FederationRuleWorkspaceDeleted`

    default: federation_rule_workspace_deleted

  - `FederationRuleID string`

    Tagged ID of the federation rule.

  - `WorkspaceID string`

    Tagged ID of the workspace named in the delete request. Removal is idempotent.

### Example

```go
package main

import (
	"context"
	"fmt"

	"github.com/anthropics/anthropic-sdk-go"
	"github.com/anthropics/anthropic-sdk-go/option"
)

func main() {
	client := anthropic.NewClient(
		option.WithAPIKey("my-anthropic-api-key"),
	)
	workspace, err := client.Organization.Federation.Rules.Workspaces.Remove(
		context.TODO(),
		"workspace_id",
		anthropic.OrganizationFederationRuleWorkspaceRemoveParams{
			FederationRuleID: "federation_rule_id",
		},
	)
	if err != nil {
		panic(err.Error())
	}
	fmt.Printf("%+v\n", workspace.FederationRuleID)
}
```

#### Response (200)

```json
{
  "federation_rule_id": "federation_rule_id",
  "type": "federation_rule_workspace_deleted",
  "workspace_id": "workspace_id"
}
```
