> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-docs-1917.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# SCIM で Users、グループ、ロールを管理する

> SCIM API を使用して、自動プロビジョニングにより W&B 組織内の Users、グループ、カスタムロールを管理します。

<Note>
  [SCIM の動作を紹介する動画](https://www.youtube.com/watch?v=Nw3QBqV0I-o)をご覧ください (12分)
</Note>

<div id="overview">
  ## 概要
</div>

System for Cross-domain Identity Management (SCIM) API を使用すると、インスタンス管理者または組織管理者は、W\&B 組織内のユーザー、グループ、カスタムロールを管理できます。SCIM グループは W\&B Teams にマッピングされます。

W\&B の SCIM API は、Okta をはじめとする主要なアイデンティティプロバイダと互換性があり、ユーザーのプロビジョニングとデプロビジョニングを自動化できます。Okta やその他のアイデンティティプロバイダの SSO 設定については、[SSO ドキュメント](/ja/platform/hosting/iam/sso/) を参照してください。

SCIM API の操作方法を示す実践的な Python の例については、[`wandb-scim`](https://github.com/wandb/examples/tree/master/wandb-scim) リポジトリを参照してください。

<div id="supported-features">
  ### サポートされている機能
</div>

* **フィルタリング**: API は `/Users` および `/Groups` エンドポイントのフィルタリングをサポートします
* **PATCH 操作**: リソースの一部更新に PATCH をサポートします
* **ETag サポート**: 競合検出のため、ETag を使用した条件付き更新をサポートします
* **サービスアカウント認証**: 組織のサービスアカウントは API にアクセスできます

<Note>
  複数の Enterprise [Multi-tenant Cloud](/ja/platform/hosting/hosting-options/multi_tenant_cloud) 組織の管理者である場合は、APIキーを使用して送信した SCIM API リクエストが正しい組織に適用されるよう、SCIM API リクエストの送信先となる組織を設定する必要があります。プロフィール画像をクリックし、**User Settings** をクリックしてから、**Default API organization** の設定を確認してください。

  選択したホスティングオプションによって、このページの例で使用する `<host-url>` プレースホルダーの値が決まります。

  また、例では `abc` や `def` などのユーザー ID を使用しています。実際のリクエストとレスポンスでは、ユーザー ID にはハッシュ化された値が使用されます。
</Note>

<div id="authentication">
  ## 認証
</div>

組織管理者は、**Bearer token** または **HTTP Basic** 認証情報を使用して認証できます。いずれの方式でも、キーを使用する場合は *同じ APIキー文字列* を使用します。主な違いを確認したうえで、ユーザーのアイデンティティまたは組織スコープのサービスアカウントを選択してください。

<div id="key-differences">
  ### 主な違い
</div>

* 使用に適した対象: ユーザーは対話的な単発の管理操作に適しており、サービスアカウントはオートメーションやインテグレーション (CI/CD、プロビジョニングツール) に適しています。
* 認証情報: ユーザーは Basic 認証でユーザー名とAPIキーを送信します。サービスアカウントは Basic 認証でAPIキーのみを送信します (ユーザー名は不要です) 。Bearer 認証では、ヘッダーにAPIキーのみを送信します (ユーザー名は不要です) 。
* Bearer と Basic の違い: Bearer は `Authorization: Bearer <API-KEY>` を使用し、キーをそのまま指定します。Basic は `Authorization: Basic <base64(...)>` を使用します (ユーザーは `username:API-KEY` をエンコードし、サービスアカウントは先頭にコロンを付けてユーザー名を空にした `:API-KEY` をエンコードします) 。
* スコープと権限: インスタンス管理者または組織管理者ユーザーのAPIキー、または [組織スコープのサービスアカウント](/ja/platform/hosting/iam/service-accounts/#organization-scoped-service-accounts) のAPIキーを使用してください。[team-scoped service accounts](/ja/platform/hosting/iam/service-accounts/#team-scoped-service-accounts) のキーでは SCIM API を認証できません。SCIM で使用するサービスアカウントは organization-scoped かつヘッドレスであるため、オートメーションの監査証跡をより明確にできます。
* 認証情報の取得場所: ユーザーは User Settings からAPIキーをコピーします。組織スコープのサービスアカウント のキーは、組織のダッシュボードの **Service account** タブにあります。
* Multi-tenant Cloud: 複数の Multi-tenant Cloud 組織にアクセスできる場合は、SCIM API 呼び出しが意図した組織にルーティングされるように、Default API organization を設定する必要があります。

<div id="bearer-token">
  ### Bearer トークン
</div>

APIキーを Bearer トークンとして送信します。

```bash theme={null}
Authorization: Bearer <API-KEY>
```

`<API-KEY>` の値は、そのプリンシパルの HTTP Basic 認証でパスワードとして使用する文字列と同じです。Bearer リクエストでは、キーを Base64 エンコードしません。

<Note>
  SCIM API の Bearer 認証は、W\&B Multi-tenant Cloud、および専用クラウドとセルフマネージド v0.79.0 以降で利用できます。
</Note>

以下の例では、`<YOUR_API_KEY>` をプレースホルダーとして使用しています。管理者ユーザーまたは組織スコープのサービスアカウントの実際のキーに置き換えてください。

**ユーザーを一覧表示**

```bash theme={null}
curl -s -S \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/scim+json" \
  "<host-url>/scim/Users"
```

**ユーザーを作成する**

```bash theme={null}
curl -s -S -X POST \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/scim+json" \
  "<host-url>/scim/Users" \
  -d '{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "userName": "dev-user2",
    "emails": [{"primary": true, "value": "dev-user2@example.com"}]
  }'
```

詳細については、[ユーザーを作成する](#create-user)を参照してください。

<div id="users">
  ### Users
</div>

対話的な管理タスクを実行する際は、個人の管理者用認証情報を使用してください。HTTP `Authorization` ヘッダーは `Basic <base64(username:API-KEY)>` の形式で指定します。

たとえば、`demo:p@55w0rd` として認証する場合:

```bash theme={null}
Authorization: Basic ZGVtbzpwQDU1dzByZA==
```

<div id="service-accounts">
  ### サービスアカウント
</div>

自動化やインテグレーションには、組織スコープのサービスアカウントを使用してください。HTTP `Authorization` ヘッダーは `Basic <base64(:API-KEY)>` の形式で作成します (先頭にコロンがあり、ユーザー名は空である点に注意してください) 。サービスアカウントのAPIキーは、組織ダッシュボードの **Service account** タブで確認できます。詳細は [組織スコープのサービスアカウント](/ja/platform/hosting/iam/service-accounts/#organization-scoped-service-accounts) を参照してください。

たとえば、APIキー `sa-p@55w0rd` を使用して認証します。

```bash theme={null}
Authorization: Basic OnNhLXBANTV3MHJk
```

<div id="user-management">
  ## ユーザー管理
</div>

SCIM の user リソースは、W\&B Users に対応します。これらの endpoints を使用して、組織内のユーザーを管理します。

<Note>
  **SCIM ユーザー JSON をパースするインテグレーションに対する破壊的変更**

  * 専用クラウドおよび セルフマネージド v0.80.1+、ならびに 2026 年 4 月 30 日以降の Multi-tenant Cloud deployment では、`/scim/Users` からの応答 (`GET` user、`GET` users、および ユーザー を返す `PATCH` 応答を含む) で、`emails` は SCIM 2.0 に準拠し、小文字のフィールド名 (`value`、`primary`、および省略可能な `type` または `display`) を持つオブジェクトの JSON 配列としてシリアライズされます。
  * それ以前の release の deployment では、`emails` は PascalCase のキー (`Value`、`Primary` など) を持つ単一の JSON オブジェクトとして返されます。

  コードで SCIM の *responses* から `emails` を読み取る場合は、`emails` を配列として扱い、primary のエントリ (または先頭の要素) を読み取ってください。

  ユーザーを作成または更新するための Request body では、すでに配列形式が使われており、変更はありません。`list-users` のフィルター `emails.value eq "..."` も変更ありません。
</Note>

<div id="get-user">
  ### ユーザーを取得
</div>

組織内の特定のユーザーに関する情報を取得します。

<Note>この操作では、サービスアカウントの情報は取得されません。</Note>

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: GET

<div id="parameters">
  #### パラメーター
</div>

| パラメーター | タイプ    | 必須  | 説明          |
| ------ | ------ | --- | ----------- |
| `id`   | string | Yes | ユーザーの一意の ID |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="ユーザー取得リクエスト">
    ```bash theme={null}
    GET /scim/Users/abc
    ```
  </Tab>

  <Tab title="ユーザー取得レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "daysActive": 42,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "lastActiveAt": "2023-10-15T14:32:10Z",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1"
    }
    ```

    レスポンスには、組織内でのユーザーのアクティビティに関する詳細が含まれます。

    * **`daysActive`**: ユーザーが組織内でアクティブだった合計日数。
    * **`lastActiveAt`**: ユーザーの直近のアクティビティの ISO 8601 タイムスタンプです。ユーザーが一度もアクティブでなかった場合は `null` が返されます。

    「active」の定義はデプロイタイプによって異なります。

    * **専用クラウド / セルフマネージド**: ユーザーがサインインする、W\&B App のいずれかのページを開く、run をログする、SDK を使用する、または何らかの形で W\&B Server とやり取りした場合、そのユーザーはアクティブとみなされます。
    * **Multi-tenant Cloud**: ユーザーが 2025 年 5 月 8 日以降に、組織スコープの監査可能なアクションを実行した場合、そのユーザーはアクティブとみなされます。完全な一覧については、[Audit logging actions](/ja/platform/hosting/monitoring-usage/audit-logging#actions) を参照してください。
  </Tab>
</Tabs>

<div id="list-users">
  ### Usersを一覧表示する
</div>

組織内のすべてのユーザーの一覧を取得します。

<Note>この操作ではサービスアカウントは取得されません。</Note>

<div id="filter-users">
  #### Users をフィルター
</div>

`/Users` エンドポイントでは、ユーザー名またはメールアドレスで Users をフィルターできます。

* `userName eq "value"` - ユーザー名でフィルター
* `emails.value eq "value"` - メールアドレスでフィルター

<div id="example">
  ##### 例
</div>

```bash theme={null}
GET /scim/Users?filter=userName eq "john.doe"
GET /scim/Users?filter=emails.value eq "john@example.com"
```

#### エンドポイント

* **URL**: `<host-url>/scim/Users`
* **method**: GET

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="Users一覧リクエスト">
    ```bash theme={null}
    GET /scim/Users
    ```
  </Tab>

  <Tab title="Users一覧レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "Resources": [
            {
                "active": true,
                "daysActive": 42,
                "displayName": "Dev User 1",
                "emails": [
                    {
                        "primary": true,
                        "value": "dev-user1@example.com"
                    }
                ],
                "id": "abc",
                "lastActiveAt": "2023-10-15T14:32:10Z",
                "meta": {
                    "resourceType": "User",
                    "created": "2023-10-01T00:00:00Z",
                    "lastModified": "2023-10-01T00:00:00Z",
                    "location": "Users/abc"
                },
                "schemas": [
                    "urn:ietf:params:scim:schemas:core:2.0:User"
                ],
                "userName": "dev-user1"
            }
        ],
        "itemsPerPage": 9999,
        "schemas": [
            "urn:ietf:params:scim:api:messages:2.0:ListResponse"
        ],
        "startIndex": 1,
        "totalResults": 1
    }
    ```

    レスポンスには、組織内での各ユーザーのアクティビティに関する詳細が含まれます。

    * **`daysActive`**: ユーザーが組織内でアクティブだった合計日数。
    * **`lastActiveAt`**: ユーザーの直近のアクティビティの ISO 8601 タイムスタンプ。ユーザーが一度もアクティブでなかった場合は `null` を返します。

    `active` の定義はデプロイタイプによって異なります。

    * **専用クラウド / セルフマネージド**: ユーザーは、サインインする、W\&B App の任意のページを開く、run をログする、SDK を使用する、または何らかの形で W\&B Server とやり取りした場合にアクティブと見なされます。
    * **Multi-tenant Cloud**: ユーザーは、2025年5月8日以降に組織を対象とする監査可能な操作を実行した場合にアクティブと見なされます。完全な一覧については、[監査ログのアクション](/ja/platform/hosting/monitoring-usage/audit-logging#actions)を参照してください。
  </Tab>
</Tabs>

<div id="create-user">
  ### ユーザーを作成
</div>

組織内に新しいユーザーを作成します。

#### エンドポイント

* **URL**: `<host-url>/scim/Users`
* **method**: POST

<div id="parameters">
  #### パラメーター
</div>

| パラメーター       | タイプ    | 必須  | 説明                                                                                               |
| ------------ | ------ | --- | ------------------------------------------------------------------------------------------------ |
| `emails`     | array  | はい  | メールオブジェクトの配列。メインメールアドレスを含める必要があります                                                               |
| `userName`   | string | はい  | 新規ユーザーのユーザー名                                                                                     |
| `modelsSeat` | string | いいえ | Models のシートレベルです。`full`、`viewer`、`none` のいずれかです。デフォルトは `full` です。**専用クラウドおよびセルフマネージドでのみ使用できます。** |
| `weaveRole`  | string | いいえ | Weave のロールレベルです。`full`、`viewer`、`none` のいずれかです。デフォルトは `full` です。**専用クラウドおよびセルフマネージドでのみ使用できます。**  |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="ユーザー作成リクエスト（専用クラウド/セルフマネージド）">
    ```bash theme={null}
    POST /scim/Users
    ```

    ```json theme={null}
    {
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "emails": [
            {
                "primary": true,
                "value": "dev-user2@example.com"
            }
        ],
        "userName": "dev-user2",
        "modelsSeat": "full",
        "weaveRole": "full"
    }
    ```
  </Tab>

  <Tab title="ユーザー作成リクエスト（Multi-tenant）">
    ```bash theme={null}
    POST /scim/Users
    ```

    ```json theme={null}
    {
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User",
            "urn:ietf:params:scim:schemas:extension:teams:2.0:User"
        ],
        "emails": [
            {
                "primary": true,
                "value": "dev-user2@example.com"
            }
        ],
        "userName": "dev-user2",
        "urn:ietf:params:scim:schemas:extension:teams:2.0:User": {
            "teams": ["my-team"]
        }
    }
    ```
  </Tab>
</Tabs>

<div id="response">
  #### レスポンス
</div>

<Tabs>
  <Tab title="ユーザー作成時のレスポンス（専用クラウド/セルフマネージド）">
    ```bash theme={null}
    (Status 201)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 2",
        "emails": [
            {
                "primary": true,
                "value": "dev-user2@example.com"
            }
        ],
        "id": "def",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "location": "Users/def"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "modelsSeat": "full",
        "weaveRole": "full",
        "userName": "dev-user2"
    }
    ```
  </Tab>

  <Tab title="ユーザー作成時のレスポンス（Multi-tenant Cloud）">
    ```bash theme={null}
    (Status 201)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 2",
        "emails": [
            {
                "primary": true,
                "value": "dev-user2@example.com"
            }
        ],
        "id": "def",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "location": "Users/def"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User",
            "urn:ietf:params:scim:schemas:extension:teams:2.0:User"
        ],
        "userName": "dev-user2",
        "organizationRole": "member",
        "teamRoles": [
            {
                "teamName": "my-team",
                "roleName": "member"
            }
        ],
        "groups": [
            {
                "value": "my-team-id"
            }
        ]
    }
    ```
  </Tab>
</Tabs>

<div id="delete-user">
  ### ユーザーを削除
</div>

<Warning>
  **管理者アクセスを維持する**

  インスタンスまたは組織には、常に少なくとも1人の管理者ユーザーが存在するようにしてください。そうしないと、組織の W\&B アカウントを設定または維持できるユーザーがいなくなります。組織で SCIM または別の自動化プロセスを使用して W\&B からユーザーのプロビジョニングを解除している場合、その解除処理によって、意図せずインスタンスまたは組織に残っている最後の管理者が削除される可能性があります。

  運用手順の策定に関する支援、または管理者アクセスの復旧については、[サポート](mailto:support@wandb.com) にお問い合わせください。
</Warning>

組織からユーザーを完全に削除します。

<Note>この操作はユーザーにのみ適用され、サービスアカウントには使用できません。サービスアカウントは W\&B Team の Settings で削除してください。</Note>

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: DELETE

<div id="parameters">
  #### パラメーター
</div>

| パラメーター | タイプ    | 必須 | 説明              |
| ------ | ------ | -- | --------------- |
| `id`   | string | はい | 削除するユーザーの一意の ID |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="ユーザーを削除するリクエスト">
    ```bash theme={null}
    DELETE /scim/Users/abc
    ```
  </Tab>

  <Tab title="ユーザーを削除するレスポンス">
    ```bash theme={null}
    (Status 204)
    ```
  </Tab>
</Tabs>

<Note>
  ユーザーを一時的に無効化するには、`PATCH` エンドポイントを使用する [ユーザーの無効化](#deactivate-user) API を参照してください。
</Note>

<div id="update-user-email">
  ### ユーザーのメールアドレスを更新する
</div>

ユーザーのメインメールアドレスを更新します。
**Multi-tenant Cloud ではサポートされていません**。この環境では、ユーザーのアカウントは組織によって管理されません。

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター  | タイプ    | 必須  | 説明                |
| ------- | ------ | --- | ----------------- |
| `id`    | string | Yes | ユーザーの一意の ID       |
| `op`    | string | Yes | `replace`         |
| `path`  | string | Yes | `emails`          |
| `value` | array  | Yes | 新しいメールオブジェクトを含む配列 |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="メールアドレス更新リクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "path": "emails",
                "value": [
                    {
                        "value": "newemail@example.com",
                        "primary": true
                    }
                ]
            }
        ]
    }
    ```
  </Tab>

  <Tab title="メールアドレス更新レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "newemail@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1"
    }
    ```
  </Tab>
</Tabs>

<div id="update-user-display-name">
  ### ユーザーの表示名を更新する
</div>

ユーザーの表示名を更新します。
**Multi-tenant Cloud ではサポートされていません**。この環境では、ユーザーのアカウントは組織で管理されません。

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター  | タイプ    | 必須 | 説明            |
| ------- | ------ | -- | ------------- |
| `id`    | string | はい | ユーザーの一意の ID   |
| `op`    | string | はい | `replace`     |
| `path`  | string | はい | `displayName` |
| `value` | string | はい | 新しい表示名        |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="表示名の更新リクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "path": "displayName",
                "value": "John Doe"
            }
        ]
    }
    ```
  </Tab>

  <Tab title="表示名の更新レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "John Doe",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2025-7-01T00:00:00Z",
            "lastModified": "2025-7-01T00:00:00Z",
            "location": "users/dev-user1"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1"
    }
    ```
  </Tab>
</Tabs>

<div id="deactivate-user">
  ### ユーザーを無効化
</div>

組織内のユーザーを無効化します。実際の結果は、デプロイタイプによって異なります。

* **専用クラウド** / **セルフマネージド**: ユーザーの `active` フィールドを `false` に設定します。無効化したユーザーの組織へのアクセスを復元するには、[ユーザーを再有効化](#reactivate-user) を参照してください。
* **Multi-tenant Cloud**: 組織からユーザーを削除します。ユーザーのアクセスを復元するには、そのユーザーを組織に再度追加してください。[ユーザーを作成](#create-user-request-multi-tenant) を参照してください。Multi-tenant Cloud では、ユーザーのアカウントは組織では管理されません。

<Note>この操作はユーザーにのみ使用でき、サービスアカウントには対応していません。サービスアカウントの無効化はサポートされていません。チームのサービスアカウントは、W\&B Team の Settings で管理してください。</Note>

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター  | タイプ    | 必須 | 説明                              |
| ------- | ------ | -- | ------------------------------- |
| `id`    | string | はい | 無効化するユーザーの一意の ID                |
| `op`    | string | はい | `replace`                       |
| `value` | object | はい | `{"active": false}` を指定したオブジェクト |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="ユーザーの無効化リクエスト (Dedicated/セルフマネージド)">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "value": {"active": false}
            }
        ]
    }
    ```
  </Tab>

  <Tab title="ユーザーの無効化リクエスト (Multi-tenant)">
    ```bash theme={null}
    PATCH /scim/Users
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "value": {"active": false}
            }
        ]
    }
    ```
  </Tab>
</Tabs>

<div id="response">
  #### レスポンス
</div>

<Tabs>
  <Tab title="ユーザー無効化のレスポンス (Dedicated/セルフマネージド)">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": false,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1"
    }
    ```
  </Tab>

  <Tab title="ユーザー無効化のレスポンス (Multi-tenant)">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "value": {"active": true}
            }
        ]
    }
    ```
  </Tab>
</Tabs>

<div id="reactivate-user">
  ### ユーザーを再有効化
</div>

組織内で以前に無効化したユーザーを再有効化します。

<Note>
  * ユーザーの再有効化はユーザーに対してのみ可能で、サービスアカウントには対応していません。サービスアカウントの再有効化はサポートされません。サービスアカウントは W\&B Team の設定で管理してください。

  * ユーザーの再有効化は [Multi-tenant Cloud](/ja/platform/hosting/hosting-options/multi_tenant_cloud) ではサポートされません。ユーザーのアクセスを復元するには、そのユーザーを組織に再度追加してください。[ユーザーを作成](#create-user-request-multi-tenant) を参照してください。Multi-tenant Cloud では、ユーザーのアカウントは組織によって管理されません。ユーザーを再有効化しようとすると、HTTP `400` エラーが返されます。レスポンス本文の `detail` フィールドは API からそのまま返されるため、従来のプロダクト用語が引き続き使われている場合があります。
    ```json theme={null}
    {
        "schemas": [
            "urn:ietf:params:scim:api:messages:2.0:Error"
        ],
        "detail": "User reactivation operations are not supported in SaaS Cloud",
        "status": "400"
    }
    ```
</Note>

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター  | タイプ    | 必須 | 説明                             |
| ------- | ------ | -- | ------------------------------ |
| `id`    | string | はい | 再有効化するユーザーの一意の ID              |
| `op`    | string | はい | `replace`                      |
| `value` | object | はい | `{"active": true}` を指定したオブジェクト |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="ユーザー再有効化リクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "value": {"active": true}
            }
        ]
    }
    ```
  </Tab>

  <Tab title="ユーザー再有効化レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1"
    }
    ```
  </Tab>
</Tabs>

<div id="assign-organization-role">
  ### 組織ロールを割り当てる
</div>

ユーザーに組織レベルのロールを割り当てます。

<Note>この操作はユーザーに対してのみ使用でき、サービスアカウントには使用できません。サービスアカウントではカスタムロールはサポートされていません。</Note>

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター  | タイプ    | 必須 | 説明                          |
| ------- | ------ | -- | --------------------------- |
| `id`    | string | はい | ユーザーの一意の ID                 |
| `op`    | string | はい | `replace`                   |
| `path`  | string | はい | `organizationRole`          |
| `value` | string | はい | ロール名 (`admin` または `member`) |

<Note>
  組織スコープの `viewer` ロールは非推奨となっており、UI で割り当てることはできなくなりました。SCIM を使用してユーザーに `viewer` ロールを割り当てる場合:

  * そのユーザーには、組織内で `member` ロールが割り当てられます。
  * そのユーザーの `modelsSeat` は、`full` ではなく `viewer` に設定されます。これにより、Models には閲覧専用で、Registry にはフルアクセスできます。利用可能な Models シートがない場合は、`Seat limit reached` エラーが返されます。シートが利用可能になれば、後で更新できます。
  * そのユーザーの `weaveRole` は、`full` ではなく `viewer` に設定されます。これにより、Weave には閲覧専用でアクセスできます。
  * そのユーザーの既存のすべてのチームおよび project ロールは、`viewer` に設定されます。
  * 組織レベルで表示されるレジストリでは、Registry の `viewer` ロールが割り当てられます。

  `member` または `admin` の組織ロールを割り当てても、ユーザーの `modelsSeat` や `weaveRole` は変更されません。
</Note>

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="組織ロール割り当てリクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "path": "organizationRole",
                "value": "admin"
            }
        ]
    }
    ```
  </Tab>

  <Tab title="組織ロール割り当てレスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1",
        "teamRoles": [
            {
                "teamName": "team1",
                "roleName": "admin"
            }
        ],
        "organizationRole": "admin"
    }
    ```
  </Tab>
</Tabs>

<div id="update-models-seat">
  ### シートを更新
</div>

ユーザーのシートを更新します。**専用クラウド** と **セルフマネージド** でのみ利用できます。

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター  | タイプ    | 必須 | 説明                                  |
| ------- | ------ | -- | ----------------------------------- |
| `id`    | string | はい | ユーザーの一意の ID                         |
| `op`    | string | はい | `replace`                           |
| `path`  | string | はい | `modelsSeat`                        |
| `value` | string | はい | シートレベル (`full`、`viewer`、または `none`) |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="シートの更新リクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "path": "modelsSeat",
                "value": "full"
            }
        ]
    }
    ```
  </Tab>

  <Tab title="シートの更新レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1",
        "organizationRole": "member",
        "modelsSeat": "full",
        "weaveRole": "full"
    }
    ```
  </Tab>
</Tabs>

<div id="update-weave-role">
  ### Weave ロールを更新する
</div>

ユーザーの Weave ロールを更新します。**専用クラウド**および**セルフマネージド**でのみ利用できます。

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター  | タイプ    | 必須 | 説明                                  |
| ------- | ------ | -- | ----------------------------------- |
| `id`    | string | はい | ユーザーの一意の ID                         |
| `op`    | string | はい | `replace`                           |
| `path`  | string | はい | `weaveRole`                         |
| `value` | string | はい | ロールレベル (`full`、`viewer`、または `none`) |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="Weave ロール更新リクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "path": "weaveRole",
                "value": "full"
            }
        ]
    }
    ```
  </Tab>

  <Tab title="Weave ロール更新レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1",
        "organizationRole": "member",
        "modelsSeat": "full",
        "weaveRole": "full"
    }
    ```
  </Tab>
</Tabs>

<div id="assign-team-role">
  ### チームロールを割り当てる
</div>

ユーザーにチームレベルのロールを割り当てます。

<Note>この操作はユーザーにのみ適用され、サービスアカウントには対応していません。サービスアカウントではカスタムロールはサポートされていません。</Note>

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター  | タイプ    | 必須 | 説明                                   |
| ------- | ------ | -- | ------------------------------------ |
| `id`    | string | はい | ユーザーの一意の ID                          |
| `op`    | string | はい | `replace`                            |
| `path`  | string | はい | `teamRoles`                          |
| `value` | array  | はい | `teamName` と `roleName` を含むオブジェクトの配列 |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="チームロール割り当てリクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "path": "teamRoles",
                "value": [
                    {
                        "roleName": "admin",
                        "teamName": "team1"
                    }
                ]
            }
        ]
    }
    ```
  </Tab>

  <Tab title="チームロール割り当てレスポンス">
    ```bash theme={null}
    (ステータス 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1",
        "teamRoles": [
            {
                "teamName": "team1",
                "roleName": "admin"
            }
        ],
        "organizationRole": "admin"
    }
    ```
  </Tab>
</Tabs>

<div id="add-to-registry">
  ### Registry に追加
</div>

割り当てられた Registry レベルのロールを付与して、ユーザーを Registry に追加します。

<Note>この操作はユーザーにのみ対応しており、サービスアカウントでは使用できません。サービスアカウントではカスタムロールはサポートされません。</Note>

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター  | タイプ    | 必須  | 説明                                       |
| ------- | ------ | --- | ---------------------------------------- |
| `id`    | string | Yes | ユーザーの一意の ID                              |
| `op`    | string | Yes | `add`                                    |
| `path`  | string | Yes | `registryRoles`                          |
| `value` | array  | Yes | `registryName` と `roleName` を含むオブジェクトの配列 |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="Registry への追加リクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "path": "registryRoles",
                "value": [
                    {
                        "roleName": "admin",
                        "registryName": "hello-registry"
                    }
                ]
            }
        ]
    }
    ```
  </Tab>

  <Tab title="Registry への追加レスポンス">
    ```bash theme={null}
    (ステータス 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1",
        "registryRoles": [
            {
                "registryName": "hello-registry",
                "roleName": "admin"
            }
        ],
        "organizationRole": "admin"
    }
    ```
  </Tab>
</Tabs>

<div id="remove-from-registry">
  ### Registry から削除
</div>

ユーザーを Registry から削除します。

<Note>
  * 削除操作は RFC 7644 SCIM プロトコル仕様に従います。特定の Registry からユーザーを削除するには、フィルター構文 `"registryRoles[registryName eq \"{registry_name}\"]"` を使用します。すべての Registry からユーザーを削除するには、`"registryRoles"` を使用します。
  * この操作はユーザーに対してのみ有効で、サービスアカウントには対応していません。サービスアカウントを Registry から削除するには、W\&B Team の Settings で行ってください。
</Note>

#### エンドポイント

* **URL**: `<host-url>/scim/Users/{id}`
* **method**: PATCH

<div id="parameters">
  #### パラメーター
</div>

| パラメーター | タイプ    | 必須 | 説明                                                                           |
| ------ | ------ | -- | ---------------------------------------------------------------------------- |
| `id`   | string | はい | ユーザーの一意の ID                                                                  |
| `op`   | string | はい | `remove`                                                                     |
| `path` | string | はい | `"registryRoles[registryName eq \"{registry_name}\"]"` または `"registryRoles"` |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="Registry から削除するリクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "path": "registryRoles[registryName eq \"goodbye-registry\"]"
            }
        ]
    }
    ```
  </Tab>

  <Tab title="Registry から削除するレスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1",
        "registryRoles": [
            {
                "registryName": "hello-registry",
                "roleName": "admin"
            }
        ],
        "organizationRole": "admin"
    }
    ```
  </Tab>
</Tabs>

<Tabs>
  <Tab title="すべての Registry から削除するリクエスト">
    ```bash theme={null}
    PATCH /scim/Users/abc
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "replace",
                "path": "registryRoles"
            }
        ]
    }
    ```
  </Tab>

  <Tab title="すべての Registry から削除するレスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "active": true,
        "displayName": "Dev User 1",
        "emails": [
            {
                "primary": true,
                "value": "dev-user1@example.com"
            }
        ],
        "id": "abc",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Users/abc"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User"
        ],
        "userName": "dev-user1",
        "organizationRole": "admin"
    }
    ```
  </Tab>
</Tabs>

<div id="group-resource">
  ## グループリソース
</div>

IAM で SCIM グループを作成すると、対応する W\&B Team が作成されてマッピングされ、以降の SCIM グループ操作はそのチームに対して行われます。チームの作成時にカスタムストレージを設定するには、リクエストに `storageBucket` を含めます。

<div id="service-accounts">
  ### サービスアカウント
</div>

SCIM を使用して W\&B Team が作成されると、サービスアカウントのチームリソースへのアクセスを維持するため、組織レベルのすべてのサービスアカウントが自動的にそのチームに追加されます。

<div id="filtering-groups">
  ### グループの絞り込み
</div>

`/Groups` エンドポイントでは、特定のチームを検索するためのフィルタリングをサポートしています:

<div id="supported-filters">
  #### サポートされているフィルター
</div>

* `displayName eq "value"` - チームの表示名でフィルター

<div id="examples">
  #### 例
</div>

```bash theme={null}
GET /scim/Groups?filter=displayName eq "engineering-team"
```

<div id="get-team">
  ### チームを取得
</div>

チームの一意の ID を指定して、チームの情報を取得します。

#### エンドポイント

* **URL**: `<host-url>/scim/Groups/{id}`
* **method**: GET

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    GET /scim/Groups/ghi
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (ステータス 200)
    ```

    ```json theme={null}
    {
        "displayName": "acme-devs",
        "id": "ghi",
        "members": [
            {
                "Value": "abc",
                "Ref": "",
                "Type": "",
                "Display": "dev-user1"
            }
        ],
        "meta": {
            "resourceType": "Group",
            "created": "2023-10-01T00:00:00Z",
            "lastModified": "2023-10-01T00:00:00Z",
            "location": "Groups/ghi"
        },
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:Group"
        ]
    }
    ```
  </Tab>
</Tabs>

<div id="list-teams">
  ### チームの一覧
</div>

チームの一覧を取得します。

#### エンドポイント

* **URL**: `<host-url>/scim/Groups`
* **method**: GET

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    GET /scim/Groups
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "Resources": [
            {
                "displayName": "acme-devs",
                "id": "ghi",
                "members": [
                    {
                        "Value": "abc",
                        "Ref": "",
                        "Type": "",
                        "Display": "dev-user1"
                    }
                ],
                "meta": {
                    "resourceType": "Group",
                    "created": "2023-10-01T00:00:00Z",
                    "lastModified": "2023-10-01T00:00:00Z",
                    "location": "Groups/ghi"
                },
                "schemas": [
                    "urn:ietf:params:scim:schemas:core:2.0:Group"
                ]
            }
        ],
        "itemsPerPage": 9999,
        "schemas": [
            "urn:ietf:params:scim:api:messages:2.0:ListResponse"
        ],
        "startIndex": 1,
        "totalResults": 1
    }
    ```
  </Tab>
</Tabs>

<div id="create-team">
  ### チーム を作成
</div>

* **エンドポイント**: **`<host-url>/scim/Groups`**
* **method**: POST
* **説明**: 新しい チーム リソースを作成します。
* **サポートされるフィールド**:

| フィールド           | タイプ    | 必須                                          |
| --------------- | ------ | ------------------------------------------- |
| `displayName`   | String | はい                                          |
| `members`       | 複数値配列  | はい (`value` サブフィールドが必須で、ユーザー ID にマッピングされます) |
| `storageBucket` | Object | いいえ                                         |

チーム の作成時に `storageBucket` オブジェクトを含めることで、チーム レベルの [Bring your own bucket (BYOB)](/ja/platform/hosting/data-security/secure-storage-connector) を設定できます。省略した場合、チーム はデフォルトまたはインスタンスレベルのストレージを使用します。BYOB ガイドを参照して、バケット (ポリシー、CORS、認証情報) をプロビジョニングし、プロバイダーごとのストレージアドレス形式を確認してください。`storageBucket` オブジェクトには、次のサブフィールドがあります。

* **必須**: `name` (バケット名) 、`provider` (`COREWEAVE`、`AWS`、`AZURE`、`GCP`、`MINIO` のいずれか) 。値では大文字と小文字が区別されるため、表示されているとおりに大文字を使用してください。
* **任意**: `path` (バケット内のパス接頭辞) 、`kmsKeyId` (暗号化用の KMS キー。AWS などで使用) 、`awsExternalId` (AWS のクロスアカウントアクセス) 、`azureTenantId` (Azure テナント ID) 、`azureClientId` (Azure マネージドアイデンティティのクライアント ID) 。

W\&B は、チーム を作成する前に、そのバケットが存在し到達可能であることを検証します。検証に失敗した場合、SCIM リクエストは失敗し、チーム は作成されません。

`provider` の値が無効な場合は、許可される値を示す SCIM エラーとともに `400 Bad Request` が返されます。

<div id="examples">
  #### 例
</div>

以下の例では、カスタム ストレージを使用しないチーム、および特定のプロバイダーで BYOB ストレージを使用するチームの作成方法を示します。リクエスト例を確認するには目的のストレージ設定のタブを選択し、レスポンス例を確認するには **レスポンス** タブを選択してください。

<Tabs>
  <Tab title="リクエスト（BYOB なし）">
    ```bash theme={null}
    POST /scim/Groups
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
      "displayName": "wandb-support",
      "members": [
        {
          "value": "def"
        }
      ]
    }
    ```
  </Tab>

  <Tab title="CoreWeave">
    ```bash theme={null}
    POST /scim/Groups
    Content-Type: application/scim+json
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
      "displayName": "ml-training-team",
      "members": [
        {
          "value": "user@example.com",
          "display": "user@example.com"
        }
      ],
      "storageBucket": {
        "name": "wandb-coreweave-bucket",
        "provider": "COREWEAVE",
        "path": "ml-training/experiments"
      }
    }
    ```
  </Tab>

  <Tab title="AWS S3">
    ```bash theme={null}
    POST /scim/Groups
    Content-Type: application/scim+json
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
      "displayName": "ml-team",
      "members": [
        {
          "value": "user@example.com",
          "display": "user@example.com"
        }
      ],
      "storageBucket": {
        "name": "my-company-wandb-data",
        "provider": "AWS",
        "path": "ml-team/experiments",
        "kmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012",
        "awsExternalId": "wandb-external-id-abc123"
      }
    }
    ```
  </Tab>

  <Tab title="Azure">
    ```bash theme={null}
    POST /scim/Groups
    Content-Type: application/scim+json
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
      "displayName": "research-team",
      "members": [],
      "storageBucket": {
        "name": "wandbstorage",
        "provider": "AZURE",
        "path": "research/artifacts",
        "azureTenantId": "12345678-1234-1234-1234-123456789012",
        "azureClientId": "87654321-4321-4321-4321-210987654321"
      }
    }
    ```
  </Tab>

  <Tab title="GCP">
    ```bash theme={null}
    POST /scim/Groups
    Content-Type: application/scim+json
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
      "displayName": "data-science-team",
      "members": [
        {
          "value": "VXNlcjox",
          "display": "jane.doe@example.com"
        },
        {
          "value": "VXNlcjoy",
          "display": "john.smith@example.com"
        }
      ],
      "storageBucket": {
        "name": "my-gcs-bucket",
        "provider": "GCP",
        "path": "data-science/runs"
      }
    }
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 201)
    ```

    ```json theme={null}
    {
      "displayName": "wandb-support",
      "id": "jkl",
      "members": [
        {
          "Value": "def",
          "Ref": "",
          "Type": "",
          "Display": "dev-user2"
        }
      ],
      "meta": {
        "resourceType": "Group",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:00:00Z",
        "location": "Groups/jkl"
      },
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"]
    }
    ```
  </Tab>
</Tabs>

<div id="update-team">
  ### チームを更新
</div>

* **エンドポイント**: **`<host-url>/scim/Groups/{id}`**
* **method**: PATCH
* **Description**: 既存のチームのメンバー一覧を更新します。
* **サポートされる操作**: `add` メンバーの追加、`remove` メンバーの削除、`replace` メンバーの置換

<Note>
  - `remove` 操作は RFC 7644 SCIM プロトコル仕様に従います。特定のユーザーを削除するには、フィルター構文 `members[value eq "{user_id}"]` を使用します。チームからすべてのユーザーを削除するには、`members` を使用します。

    **ユーザーの識別**: メンバー操作での `{user_id}` には、次のいずれかを使用できます。

    * W\&B ユーザー ID
    * メールアドレス (例: "[user@example.com](mailto:user@example.com)")
  - これらの操作はユーザーに対してのみ機能し、サービスアカウントには対応していません。チームのサービスアカウントは、W\&B Team の設定で更新してください。
</Note>

<Info>
  リクエスト内の `{team_id}` は実際のチーム ID に、`{user_id}` は実際のユーザー ID またはメールアドレスに置き換えてください。
</Info>

<div id="replace-team-members">
  ### チームメンバーの置き換え
</div>

チームのすべてのメンバーを新しいリストに置き換えます。

<Note>この操作はユーザーにのみ適用され、サービスアカウントには対応していません。サービスアカウントは W\&B Team の Settings で管理してください。</Note>

* **エンドポイント**: **`<host-url>/scim/Groups/{id}`**
* **method**: PUT
* **説明**: チームメンバーのリスト全体を置き換えます。

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    PUT /scim/Groups/{team_id}
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
      "displayName": "acme-devs",
      "members": [
        {
          "value": "{user_id_1}"
        },
        {
          "value": "{user_id_2}"
        }
      ]
    }
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
      "displayName": "acme-devs",
      "id": "ghi",
      "members": [
        {
          "Value": "user_id_1",
          "Ref": "",
          "Type": "",
          "Display": "user1"
        },
        {
          "Value": "user_id_2",
          "Ref": "",
          "Type": "",
          "Display": "user2"
        }
      ],
      "meta": {
        "resourceType": "Group",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:01:00Z",
        "location": "Groups/ghi"
      },
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"]
    }
    ```
  </Tab>
</Tabs>

**チームにユーザーを追加する**

`acme-devs` に `dev-user2` を追加する場合:

<Note>この操作はユーザーにのみ適用され、サービスアカウントには対応していません。サービスアカウントは W\&B Team の Settings で管理してください。</Note>

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    PATCH /scim/Groups/{team_id}
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
      "Operations": [
        {
          "op": "add",
          "path": "members",
          "value": [
            {
              "value": "{user_id}"
            }
          ]
        }
      ]
    }
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
      "displayName": "acme-devs",
      "id": "ghi",
      "members": [
        {
          "Value": "abc",
          "Ref": "",
          "Type": "",
          "Display": "dev-user1"
        },
        {
          "Value": "def",
          "Ref": "",
          "Type": "",
          "Display": "dev-user2"
        }
      ],
      "meta": {
        "resourceType": "Group",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:01:00Z",
        "location": "Groups/ghi"
      },
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"]
    }
    ```
  </Tab>
</Tabs>

**チームから特定のユーザーを削除する**

`acme-devs` から `dev-user2` を削除する場合:

<Note>この操作はユーザーにのみ適用され、サービスアカウントには対応していません。サービスアカウントは W\&B Team の Settings で管理してください。</Note>

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    PATCH /scim/Groups/{team_id}
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
      "Operations": [
        {
          "op": "remove",
          "path": "members[value eq \"{user_id}\"]"
        }
      ]
    }
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (ステータス 200)
    ```

    ```json theme={null}
    {
      "displayName": "acme-devs",
      "id": "ghi",
      "members": [
        {
          "Value": "abc",
          "Display": "dev-user1"
        }
      ],
      "meta": {
        "resourceType": "Group",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:01:00Z",
        "location": "Groups/ghi"
      },
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"]
    }
    ```
  </Tab>
</Tabs>

**チームからすべてのユーザーを削除する**

`acme-devs` からすべてのユーザーを削除する場合:

<Note>この操作はユーザーにのみ有効で、サービスアカウントには使用できません。サービスアカウントは W\&B Team の Settings で管理してください。</Note>

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    PATCH /scim/Groups/{team_id}
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
      "Operations": [
        {
          "op": "remove",
          "path": "members"
        }
      ]
    }
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (ステータス 200)
    ```

    ```json theme={null}
    {
      "displayName": "acme-devs",
      "id": "ghi",
      "members": null,
      "meta": {
        "resourceType": "Group",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:01:00Z",
        "location": "Groups/ghi"
      },
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"]
    }
    ```
  </Tab>
</Tabs>

<div id="delete-team">
  ### チームを削除
</div>

* チームには追加のデータが関連付けられているため、現在、SCIM API ではチームを削除できません。すべての関連データを含めて削除してよいことを確認するには、アプリからチームを削除してください。

<div id="role-resource">
  ## Role resource
</div>

SCIM のロールリソースは、W\&B のカスタムロールに対応しています。前述のとおり、`/Roles` エンドポイントは公式の SCIM スキーマの一部ではありませんが、W\&B では組織内のカスタムロールを自動管理できるようにするため、`/Roles` エンドポイントを追加しています。

<div id="get-custom-role">
  ### カスタムロール情報を取得
</div>

ロールの一意の ID を指定して、カスタムロールの情報を取得します。

<div id="endpoint">
  #### Endpoint
</div>

* **URL**: `<host-url>/scim/Roles/{id}`
* **Method**: GET

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    GET /scim/Roles/abc
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
        "description": "A sample custom role for example",
        "id": "Um9sZTo3",
        "inheritedFrom": "member", // 事前定義ロールを示します
        "meta": {
            "resourceType": "Role",
            "created": "2023-11-20T23:10:14Z",
            "lastModified": "2023-11-20T23:31:23Z",
            "location": "Roles/Um9sZTo3"
        },
        "name": "Sample custom role",
        "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
        "permissions": [
            {
                "name": "artifact:read",
                "isInherited": true // member の事前定義ロールから継承されています
            },
            ...
            ...
            {
                "name": "project:update",
                "isInherited": false // 管理者が追加したカスタム権限です
            }
        ],
        "schemas": [
            ""
        ]
    }
    ```
  </Tab>
</Tabs>

<div id="list-custom-roles">
  ### カスタムロールの一覧
</div>

W\&B 組織内のすべてのカスタムロールの情報を取得します。

<div id="endpoint">
  #### Endpoint
</div>

* **URL**: `<host-url>/scim/Roles`
* **Method**: GET

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    GET /scim/Roles
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    ```json theme={null}
    {
       "Resources": [
            {
                "description": "A sample custom role for example",
                "id": "Um9sZTo3",
                "inheritedFrom": "member", // カスタムロールが継承元とする事前定義ロールを示します
                "meta": {
                    "resourceType": "Role",
                    "created": "2023-11-20T23:10:14Z",
                    "lastModified": "2023-11-20T23:31:23Z",
                    "location": "Roles/Um9sZTo3"
                },
                "name": "Sample custom role",
                "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
                "permissions": [
                    {
                        "name": "artifact:read",
                        "isInherited": true // member の事前定義ロールから継承
                    },
                    ...
                    ...
                    {
                        "name": "project:update",
                        "isInherited": false // 管理者が追加したカスタム権限
                    }
                ],
                "schemas": [
                    ""
                ]
            },
            {
                "description": "Another sample custom role for example",
                "id": "Um9sZToxMg==",
                "inheritedFrom": "viewer", // カスタムロールが継承元とする事前定義ロールを示します
                "meta": {
                    "resourceType": "Role",
                    "created": "2023-11-21T01:07:50Z",
                    "location": "Roles/Um9sZToxMg=="
                },
                "name": "Sample custom role 2",
                "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
                "permissions": [
                    {
                        "name": "launchagent:read",
                        "isInherited": true // viewer の事前定義ロールから継承
                    },
                    ...
                    ...
                    {
                        "name": "run:stop",
                        "isInherited": false // 管理者が追加したカスタム権限
                    }
                ],
                "schemas": [
                    ""
                ]
            }
        ],
        "itemsPerPage": 9999,
        "schemas": [
            "urn:ietf:params:scim:api:messages:2.0:ListResponse"
        ],
        "startIndex": 1,
        "totalResults": 2
    }
    ```
  </Tab>
</Tabs>

<div id="create-custom-role">
  ### カスタムロールを作成
</div>

* **エンドポイント**: **`<host-url>/scim/Roles`**
* **メソッド**: POST
* **説明**: W\&B 組織に新しいカスタムロールを作成します。
* **サポートされるフィールド**:

| フィールド           | タイプ          | 必須                                                                                                                                                |
| --------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`          | String       | カスタムロール名                                                                                                                                          |
| `description`   | String       | カスタムロールの説明                                                                                                                                        |
| `permissions`   | Object array | 権限オブジェクトの配列です。各オブジェクトには、値が `w&bobject:operation` 形式の `name` 文字列フィールドが含まれます。たとえば、W\&B の run に対する delete 操作の権限オブジェクトでは、`name` は `run:delete` になります。 |
| `inheritedFrom` | String       | カスタムロールが継承元とする事前定義ロールです。`member` または `viewer` のいずれかを指定できます。                                                                                       |

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    POST /scim/Roles
    ```

    ```json theme={null}
    {
      "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Role"],
      "name": "Sample custom role",
      "description": "A sample custom role for example",
      "permissions": [
        {
          "name": "project:update"
        }
      ],
      "inheritedFrom": "member"
    }
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 201)
    ```

    ```json theme={null}
    {
      "description": "A sample custom role for example",
      "id": "Um9sZTo3",
      "inheritedFrom": "member", // 事前定義ロールであることを示します
      "meta": {
        "resourceType": "Role",
        "created": "2023-11-20T23:10:14Z",
        "lastModified": "2023-11-20T23:31:23Z",
        "location": "Roles/Um9sZTo3"
      },
      "name": "Sample custom role",
      "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
      "permissions": [
        {
          "name": "artifact:read",
          "isInherited": true // member の事前定義ロールから継承
        },
        ...
        ...
        {
          "name": "project:update",
          "isInherited": false // 管理者が追加したカスタム権限
        }
      ],
      "schemas": [
        ""
      ]
    }
    ```
  </Tab>
</Tabs>

<div id="update-custom-role">
  ### カスタムロールを更新
</div>

<div id="add-permissions-to-role">
  #### ロールに権限を追加する
</div>

* **Endpoint**: **`<host-url>/scim/Roles/{id}`**
* **Method**: PATCH
* **Description**: 既存のカスタムロールに権限を追加します。

<Tabs>
  <Tab title="Request">
    ```bash theme={null}
    PATCH /scim/Roles/{role_id}
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "add",
                "path": "permissions",
                "value": [
                    {
                        "name": "project:delete"
                    },
                    {
                        "name": "run:stop"
                    }
                ]
            }
        ]
    }
    ```
  </Tab>

  <Tab title="Response">
    ```bash theme={null}
    (Status 200)
    ```

    新しい権限が追加された更新後のロールを返します。
  </Tab>
</Tabs>

<div id="remove-a-permission-from-a-role">
  #### ロールから権限を削除する
</div>

* **エンドポイント**: **`<host-url>/scim/Roles/{id}`**
* **method**: PATCH
* **説明**: 既存のカスタムロールから権限を削除します。

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    PATCH /scim/Roles/{role_id}
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations": [
            {
                "op": "remove",
                "path": "permissions",
                "value": [
                    {
                        "name": "project:update"
                    }
                ]
            }
        ]
    }
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    指定した権限を削除した、更新後のロールを返します。
  </Tab>
</Tabs>

<div id="replace-custom-role">
  ### カスタムロールを置き換える
</div>

* **エンドポイント**: **`<host-url>/scim/Roles/{id}`**
* **Method**: PUT
* **説明**: カスタムロール定義全体を置き換えます。

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    PUT /scim/Roles/{role_id}
    ```

    ```json theme={null}
    {
        "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Role"],
        "name": "Updated custom role",
        "description": "Updated description for the custom role",
        "permissions": [
            {
                "name": "project:read"
            },
            {
                "name": "run:read"
            },
            {
                "name": "artifact:read"
            }
        ],
        "inheritedFrom": "viewer"
    }
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 200)
    ```

    置き換え後のロール定義全体を返します。
  </Tab>
</Tabs>

<div id="delete-custom-role">
  ### カスタムロールを削除
</div>

W\&B組織内のカスタムロールを削除します。**注意して使用してください**。この操作を実行する前にそのカスタムロールが割り当てられていたすべてのユーザーには、カスタムロールの継承元である事前定義ロールが割り当てられます。

<div id="endpoint">
  #### Endpoint
</div>

* **URL**: `<host-url>/scim/Roles/{id}`
* **Method**: DELETE

<div id="examples">
  #### 例
</div>

<Tabs>
  <Tab title="リクエスト">
    ```bash theme={null}
    DELETE /scim/Roles/abc
    ```
  </Tab>

  <Tab title="レスポンス">
    ```bash theme={null}
    (Status 204 No Content)
    ```
  </Tab>
</Tabs>

<div id="advanced-features">
  ## 高度な機能
</div>

<div id="etag-support">
  ### ETag サポート
</div>

SCIM API は、同時変更による競合を防ぐため、条件付き更新で ETags をサポートしています。ETags は、レスポンスヘッダー `ETag` と `meta.version` フィールドで返されます。

<div id="etags">
  #### ETags
</div>

ETagを使用するには:

1. **現在のETagを取得**: リソースをGETした際に、レスポンスのETagヘッダーを確認します
2. **条件付き更新**: 更新時に、`If-Match`ヘッダーにETagを含めます

<div id="examples">
  #### 例
</div>

```
# ユーザーを取得してETagを記録する
GET /scim/Users/abc
# レスポンスに含まれる内容: ETag: W/"xyz123"

# ETagを使用して更新する
PATCH /scim/Users/abc
If-Match: W/"xyz123"

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "organizationRole",
            "value": "admin"
        }
    ]
}
```

`412 Precondition Failed` エラーのレスポンスは、取得後にそのリソースが変更されたことを示します。

<div id="error-handling">
  ### エラー処理
</div>

SCIM APIは標準のSCIMエラーレスポンスを返します。

| ステータスコード | 説明                                 |
| -------- | ---------------------------------- |
| `200`    | 成功                                 |
| `201`    | 作成済み                               |
| `204`    | No Content (削除成功)                  |
| `400`    | Bad Request - 無効なパラメーターまたはリクエストボディ |
| `401`    | Unauthorized - 認証に失敗               |
| `403`    | Forbidden - 権限不足                   |
| `404`    | Not Found - リソースが存在しません            |
| `409`    | Conflict - リソースはすでに存在します           |
| `412`    | Precondition Failed - ETag の不一致    |
| `500`    | Internal Server Error              |

<div id="implementation-differences-per-deployment-type">
  ### デプロイタイプごとの実装の違い
</div>

W\&B では 2 種類の SCIM API 実装を提供しており、利用できる機能はそれぞれ異なります。

| 機能                       | Multi-tenant Cloud | 専用クラウドとセルフマネージド |
| ------------------------ | ------------------ | --------------- |
| ユーザーのメールアドレスを更新          | -                  | ✓               |
| ユーザーの表示名を更新              | -                  | ✓               |
| ユーザーの無効化                 | ✓                  | ✓               |
| ユーザーの再有効化                | -                  | ✓               |
| ユーザーごとに複数のメールアドレス        | ✓                  | -               |
| 作成/更新時に `modelsSeat` を設定 | -                  | ✓               |
| 作成/更新時に `weaveRole` を設定  | -                  | ✓               |

<div id="limitations">
  ## 制限事項
</div>

* **最大結果数**: 1リクエストあたり9999件。
* **専用クラウド と セルフマネージド**: 1ユーザーにつきメールアドレスは1つのみサポートされます。
* **チーム の削除**: SCIM 経由ではサポートされません (W\&B の Web インターフェイスを使用してください) 。
* **ユーザー の再有効化**: Multi-tenant Cloud 環境ではサポートされません。
* **シート数の制限**: 組織のシート数制限に達すると、処理が失敗する場合があります。
