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

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

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

<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 API を使用すると、W\&B App で手動操作する代わりに、アイデンティティ プロバイダまたは CI/CD パイプラインを通じて、ユーザーのプロビジョニングとプロビジョニング解除、チーム メンバーシップの管理、カスタム ロールの定義をプログラムで実行できます。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>

SCIM API は次の機能をサポートしています。

* **フィルタリング**: API は `/Users` および `/Groups` エンドポイントのフィルタリングをサポートします。
* **PATCH 操作**: リソースの一部更新に `PATCH` をサポートします。
* **ETag サポート**: 競合検出のため、ETag を使用した条件付き更新をサポートします。
* **サービスアカウント認証**: 組織のサービスアカウントは API にアクセスできます。
* **サービスアカウントのライフサイクル**: [チームスコープおよび組織スコープのサービスアカウント](/ja/platform/hosting/iam/service-accounts)のプロビジョニングとプロビジョニング解除を行えます。**Multi-tenant Cloud**、**専用クラウド**、および **セルフマネージド** v0.81.0+ でサポートされます。

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

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

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

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

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

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

次のリストでは、SCIM 認証におけるユーザーの認証情報とサービスアカウントの認証情報を比較します。

* 使用に適した対象: ユーザーは対話的な単発の管理操作に適しており、サービスアカウントはオートメーションやインテグレーション (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キーを使用してください。[チームスコープのサービスアカウント](/ja/platform/hosting/iam/service-accounts/#team-scoped-service-accounts) のキーでは SCIM API を認証できません。SCIM で使用するサービスアカウントは 組織スコープ かつヘッドレスであるため、オートメーションの監査証跡をより明確にできます。
* 認証情報の取得場所: ユーザーは User Settings からAPIキーをコピーします。組織スコープのサービスアカウント のキーは、組織のダッシュボードの **Service account** タブにあります。
* Multi-tenant Cloud: 複数の Multi-tenant Cloud 組織にアクセスできる場合は、SCIM API 呼び出しが意図した組織にルーティングされるように、Default API organization を設定する必要があります。

<div id="bearer-token">
  ### Bearer token
</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>

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

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

```bash theme={null}
curl -s -S \
  -H "Authorization: Bearer [API-KEY]" \
  -H "Content-Type: application/scim+json" \
  "[HOST-URL]/scim/Users"
```

**ユーザーの作成**

```bash theme={null}
curl -s -S -X POST \
  -H "Authorization: Bearer [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](#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 とサービスアカウントに対応します。このセクションの エンドポイント を使用して、組織内のユーザーとサービスアカウントのプロビジョニング、更新、削除を行います。たとえば、新しい従業員の受け入れ、サービス認証情報のローテーション、退職するユーザーのアクセス削除を行う場合です。

サービスアカウントの概念と UI ワークフローについては、[サービスアカウントを使用してワークフローを自動化する](/ja/platform/hosting/iam/service-accounts) を参照してください。

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

ユーザー ID を使用して、組織内の特定のユーザーまたはサービスアカウントの情報を取得できます。メールアドレスを使用してユーザーの情報を取得することもできます。

サービスアカウントの応答には、`accountType` (チームスコープのサービスアカウントは `SERVICE`、組織スコープのサービスアカウントは `ORG_SERVICE`) が含まれます。サービスアカウントには `emails` は含まれません。

#### エンドポイント

* **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="ユーザー取得レスポンス">
    ```text 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>

組織内のすべてのユーザーとサービスアカウントの一覧を取得します。各リソースには `accountType` (`USER`、`SERVICE`、または `ORG_SERVICE`) が含まれます。

<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一覧レスポンス">
    ```text 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",
        "modelsSeat": "full",
        "weaveRole": "full",
        "urn:ietf:params:scim:schemas:extension:teams:2.0:User": {
            "teams": ["my-team"]
        }
    }
    ```
  </Tab>
</Tabs>

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

<Tabs>
  <Tab title="ユーザー作成時のレスポンス（専用クラウド/セルフマネージド）">
    ```text 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）">
    ```text 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",
        "modelsSeat": "full",
        "weaveRole": "full",
        "teamRoles": [
            {
                "teamName": "my-team",
                "roleName": "member"
            }
        ],
        "groups": [
            {
                "value": "my-team-id"
            }
        ]
    }
    ```
  </Tab>
</Tabs>

<div id="provision-service-account">
  ### サービスアカウントをプロビジョニング
</div>

組織内に、チームスコープまたは組織スコープのサービスアカウントを作成します。このエンドポイントを使用して、オートメーション、CI/CD、または人間のユーザーに紐付けるべきではないインテグレーション向けのヘッドレスIDを作成します。通常のユーザーを作成する場合は、`accountType` を省略します。[Create user](#create-user) を参照してください。

<Note>
  **専用クラウド**、**セルフマネージド** v0.81.0+、および **Multi-tenant Cloud** で利用できます。

  * `userName` にはサービスアカウント名を設定します。API はアカウントの表示名として `userName` を使用するため、リクエストボディ内の `displayName` は無視されます。
  * サービスアカウントでは `emails` は必須ではありません。
  * `modelsSeat` と `weaveRole` は作成時にはサポートされておらず、指定すると `400 Bad Request` を返します。
  * サービスアカウントは `PATCH` または `PUT` で更新できず、無効化することもできません。また、SCIM を通じて組織、チーム、または Registry のロールを割り当てることもできません。プロビジョニング後に W\&B App でAPIキーを作成してください。
</Note>

#### エンドポイント

* **URL**: `[HOST-URL]/scim/Users`
* **method**: `POST`

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

| パラメーター                                                  | タイプ    | 必須  | 説明                                                                                                                                                                                                                                     |
| ------------------------------------------------------- | ------ | --- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `userName`                                              | string | Yes | サービスアカウントの一意の名前。                                                                                                                                                                                                                       |
| `accountType`                                           | string | Yes | [チームスコープのサービスアカウント](/ja/platform/hosting/iam/service-accounts/#team-scoped-service-accounts) には `SERVICE`、[組織スコープのサービスアカウント](/ja/platform/hosting/iam/service-accounts/#organization-scoped-service-accounts) には `ORG_SERVICE` を指定します。 |
| `urn:ietf:params:scim:schemas:extension:teams:2.0:User` | object | Yes | Teams 拡張オブジェクト。                                                                                                                                                                                                                        |
| `defaultTeam`                                           | string | Yes | Teams 拡張のサブフィールドです。既存の W\&B Team の名前を指定します。サービスアカウントはこのチームの Member として作成されます。チームスコープのサービスアカウントが参加するチームは、このチームのみです。組織スコープのサービスアカウントは、後から SCIM によって作成されるチームにも自動的に追加されます。                                                                 |
| `teams`                                                 | array  | No  | **Multi-tenant Cloud のみ。** アカウントを追加するチーム名の配列です。このフィールドを使用する場合は、`defaultTeam` と同じチームも含めてください。                                                                                                                                           |

<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",
            "urn:ietf:params:scim:schemas:extension:teams:2.0:User"
        ],
        "userName": "sa-deploy-bot",
        "accountType": "SERVICE",
        "urn:ietf:params:scim:schemas:extension:teams:2.0:User": {
            "defaultTeam": "ml-platform"
        }
    }
    ```
  </Tab>

  <Tab title="組織サービスアカウントをプロビジョニングするリクエスト">
    ```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"
        ],
        "userName": "sa-ci-runner",
        "accountType": "ORG_SERVICE",
        "urn:ietf:params:scim:schemas:extension:teams:2.0:User": {
            "defaultTeam": "ml-platform"
        }
    }
    ```
  </Tab>
</Tabs>

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

<Tabs>
  <Tab title="チームサービスアカウントのプロビジョニング レスポンス">
    ```text theme={null}
    (Status 201)
    ```

    ```json theme={null}
    {
        "accountType": "SERVICE",
        "active": true,
        "displayName": "sa-deploy-bot",
        "id": "xyz",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "location": "Users/xyz"
        },
        "organizationRole": "member",
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User",
            "urn:ietf:params:scim:schemas:extension:wandb:2.0:User"
        ],
        "teamRoles": [
            {
                "teamName": "ml-platform",
                "roleName": "member"
            }
        ],
        "urn:ietf:params:scim:schemas:extension:wandb:2.0:User": {
            "organizationRole": "member"
        },
        "userName": "sa-deploy-bot"
    }
    ```
  </Tab>

  <Tab title="組織サービスアカウントのプロビジョニング レスポンス">
    ```text theme={null}
    (Status 201)
    ```

    ```json theme={null}
    {
        "accountType": "ORG_SERVICE",
        "active": true,
        "displayName": "sa-ci-runner",
        "id": "xyz",
        "meta": {
            "resourceType": "User",
            "created": "2023-10-01T00:00:00Z",
            "location": "Users/xyz"
        },
        "organizationRole": "member",
        "schemas": [
            "urn:ietf:params:scim:schemas:core:2.0:User",
            "urn:ietf:params:scim:schemas:extension:wandb:2.0:User"
        ],
        "teamRoles": [
            {
                "teamName": "ml-platform",
                "roleName": "member"
            }
        ],
        "urn:ietf:params:scim:schemas:extension:wandb:2.0:User": {
            "organizationRole": "member"
        },
        "userName": "sa-ci-runner"
    }
    ```
  </Tab>
</Tabs>

組織スコープのサービスアカウントでは、`accountType` は `ORG_SERVICE` です。

**セルフマネージド**環境では、`organizationRole` はアカウントタイプに応じて、`member` ではなく `service` または `org_service` になります。

レスポンスで次のいずれかのエラーが返された場合は、リクエストに次のような一般的な問題がないか確認してください。

* `409 Conflict`: リクエストに、同じサービスアカウントに対する重複した `userName` キーが含まれています。
* `400 Bad Request`: リクエストで `defaultTeam` が指定されていないか、無効な値が設定されています。

<div id="deprovision-service-account">
  ### サービスアカウントのプロビジョニング解除
</div>

サービスアカウントと、その組織へのメンバーシップを完全に削除します。サービスアカウントが不要になった場合 (たとえば、オートメーション パイプラインを廃止した後) は、このエンドポイントを使用してください。これはハード削除であり、SCIM を介してアカウントを再有効化することはできません。

<Note>
  **専用クラウド**、**セルフマネージド** v0.81.0+、および **Multi-tenant Cloud** で利用できます。サービスアカウントの SCIM ユーザー `id` は、プロビジョニング時のレスポンス、または [Get user](#get-user) から取得したものを使用してください。プロビジョニングを解除しても、すでに発行済みの APIキー は削除されません。必要に応じて、W\&B App でキーを個別に失効してください。
</Note>

#### エンドポイント

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **method**: `DELETE`

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

| パラメーター | タイプ    | 必須  | 説明                  |
| ------ | ------ | --- | ------------------- |
| `id`   | string | Yes | サービスアカウントの一意の IDです。 |

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

<Tabs>
  <Tab title="サービスアカウントのプロビジョニング解除リクエスト">
    ```bash theme={null}
    DELETE /scim/Users/xyz
    ```
  </Tab>

  <Tab title="サービスアカウントのプロビジョニング解除レスポンス">
    ```text theme={null}
    (ステータス 204)
    ```
  </Tab>
</Tabs>

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

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

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

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

組織からユーザーを完全に削除します。サービスアカウントを削除するには、[サービスアカウントのプロビジョニング解除](#deprovision-service-account) を参照してください。

#### エンドポイント

* **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="ユーザーを削除するレスポンス">
    ```text 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="メールアドレス更新レスポンス">
    ```text 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="表示名の更新レスポンス">
    ```text 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/セルフマネージド)">
    ```text 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)">
    ```text 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="ユーザー再有効化レスポンス">
    ```text 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="組織ロール割り当てレスポンス">
    ```text 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="シートの更新レスポンス">
    ```text 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 ロール更新レスポンス">
    ```text 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",
        "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="チームロール割り当てレスポンス">
    ```text 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 への追加レスポンス">
    ```text 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 から削除するレスポンス">
    ```text 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>

<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 から削除するレスポンス">
    ```text 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",
        "organizationRole": "admin"
    }
    ```
  </Tab>
</Tabs>

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

SCIM グループリソースは W\&B Team にマッピングされます。このセクションのエンドポイントを使用して、チームの作成、チームメンバーシップの管理、さらにアイデンティティプロバイダまたはオートメーションからのチームレベルのストレージ設定 (任意) を行えます。IAM で SCIM グループを作成すると、対応する W\&B Team が作成されてマッピングされ、以降の SCIM グループ操作はそのチームに対して行われます。チームの作成時にカスタムストレージを設定するには、リクエストに `storageBucket` を含めます。

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

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

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

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

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

`/Groups` エンドポイントでは、次のフィルターがサポートされます:

* `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="レスポンス">
    ```text 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="レスポンス">
    ```text theme={null}
    (ステータス 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>

新しい チーム リソースを作成します。

#### エンドポイント

* **URL**: `[HOST-URL]/scim/Groups`
* **method**: `POST`

<div id="supported-fields">
  #### サポートされるフィールド
</div>

| フィールド           | タイプ    | 必須                                          |
| --------------- | ------ | ------------------------------------------- |
| `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="レスポンス">
    ```text theme={null}
    (ステータス 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>

既存のチームのメンバー一覧を更新します。

#### エンドポイント

* **URL**: `[HOST-URL]/scim/Groups/{id}`
* **Method**: `PATCH`
* **サポートされる操作**: `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>

#### エンドポイント

* **URL**: `[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="レスポンス">
    ```text theme={null}
    (ステータス 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>

<div id="add-a-user-to-a-team">
  ### チームにユーザーを追加する
</div>

`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="レスポンス">
    ```text 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>

<div id="remove-a-specific-user-from-a-team">
  ### チームから特定のユーザーを削除する
</div>

`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="レスポンス">
    ```text 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>

<div id="remove-all-users-from-a-team">
  ### チームからすべてのユーザーを削除する
</div>

`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="レスポンス">
    ```text 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 ではチームを削除できません。すべての関連データを含めて削除してよいことを確認するには、W\&B App からチームを削除してください。

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

SCIM のロールリソースは、W\&B のカスタムロールに対応しています。このセクションのエンドポイントを使用すると、カスタムロールをプログラムで作成および管理できます (たとえば、ロール定義をアクセスポリシーと同期した状態に保つためです) 。`/Roles` エンドポイントは公式の SCIM スキーマの一部ではありません。W\&B では組織内のカスタムロールを自動管理できるようにするため、`/Roles` エンドポイントを追加しています。

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

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

#### エンドポイント

* **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="レスポンス">
    ```text 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 組織内のすべてのカスタムロールの情報を取得します。

#### エンドポイント

* **URL**: `[HOST-URL]/scim/Roles`
* **Method**: `GET`

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

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

  <Tab title="レスポンス">
    ```text 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>

W\&B 組織に新しいカスタムロールを作成します。

#### エンドポイント

* **URL**: `[HOST-URL]/scim/Roles`
* **Method**: `POST`

<div id="supported-fields">
  #### サポートされるフィールド
</div>

| フィールド           | タイプ          | 必須                                                                                                                                                |
| --------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `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="レスポンス">
    ```text 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>

既存のカスタムロールに権限を追加します。

<div id="endpoint">
  ##### エンドポイント
</div>

* **URL**: `[HOST-URL]/scim/Roles/{id}`
* **Method**: `PATCH`

<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">
    ```text theme={null}
    (Status 200)
    ```

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

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

既存のカスタムロールから権限を削除します。

<div id="endpoint">
  ##### エンドポイント
</div>

* **URL**: `[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="レスポンス">
    ```text theme={null}
    (Status 200)
    ```

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

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

カスタムロール定義全体を置き換えます。

#### エンドポイント

* **URL**: `[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="レスポンス">
    ```text theme={null}
    (Status 200)
    ```

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

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

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

#### エンドポイント

* **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="レスポンス">
    ```text theme={null}
    (Status 204 No Content)
    ```
  </Tab>
</Tabs>

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

以下のセクションでは、SCIM インテグレーションを本番環境で安全に運用するのに役立つオプション機能 (ETag ベースの同時実行制御と標準エラー応答) について説明します。

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

SCIM API は、同時変更による競合を防ぐため、条件付き更新で ETags をサポートしています。これは、複数の管理者または自動化システムが同じリソースを更新する場合に重要です。1 つの更新によって別の更新が気付かないうちに上書きされるのを防げるためです。ETags は、レスポンスヘッダー `ETag` と `meta.version` フィールドで返されます。

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

ETagを使用するには、次のstepに従います:

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

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

```text theme={null}
# ユーザーを取得して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 実装を提供しており、利用できる機能はそれぞれ異なります。SCIM と統合する前に以下の表を確認し、利用している操作がご利用のデプロイタイプで使用可能かどうかを確認してください。

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

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

SCIM インテグレーションを設計する際は、次の制約事項に留意してください:

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