> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/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>

<h2 id="overview">
  概要
</h2>

このページでは、インスタンス管理者と組織管理者が System for Cross-domain Identity Management (SCIM) API を使用して、W\&B のアイデンティティ管理を自動化する方法について説明します。SCIM API を使用すると、W\&B アプリで手動操作を行わなくても、アイデンティティプロバイダや CI/CD パイプラインを通じて、ユーザーのプロビジョニングとデプロビジョニング、チームメンバーシップの管理、カスタムロールの定義をプログラムから実行できます。SCIM グループは W\&B Teams に対応します。

W\&B の SCIM API は、Okta や Microsoft Entra などのアイデンティティプロバイダで利用可能です。Okta、Microsoft Entra、その他のアイデンティティプロバイダでの SSO の設定については、[SSO のドキュメント](/ja/products/wandb/platform/hosting/iam/sso)を参照してください。

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

<h3 id="supported-features">
  サポートされる機能
</h3>

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

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

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

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

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

<h2 id="authentication">
  認証
</h2>

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

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

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

* 適した用途: ユーザーは、対話的に行う単発の管理 action に適しています。サービスアカウントは、オートメーションやインテグレーション (CI/CD、プロビジョニングツール) に適しています。
* 認証情報: Basic 認証では、ユーザーはユーザー名と APIキーを送信します。サービスアカウントは、Basic 認証で APIキーのみを送信します (ユーザー名は不要)。Bearer 認証では、ヘッダーで APIキーのみを送信します (ユーザー名は不要)。
* Bearer と Basic の違い: Bearer では、キーをそのまま使用して `Authorization: Bearer [API-KEY]` を指定します。Basic では `Authorization: Basic <base64(...)>` を使用します (ユーザーは `username:API-KEY` をエンコードし、サービスアカウントはユーザー名を空にして先頭にコロンを付けた `:API-KEY` をエンコードします)。
* スコープと権限: インスタンス管理者または組織管理者のユーザー、あるいは[組織スコープのサービスアカウント](/ja/products/wandb/platform/hosting/iam/service-accounts#organization-scoped-service-accounts)の APIキーを使用してください。[チームスコープのサービスアカウント](/ja/products/wandb/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 を設定する必要があります。

<h3 id="bearer-token">
  Bearer token
</h3>

次のように、APIキーを Bearer token として送信します。

```bash theme={"system"}
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={"system"}
curl -s -S \
  -H "Authorization: Bearer [API-KEY]" \
  -H "Content-Type: application/scim+json" \
  "[HOST-URL]/scim/Users"
```

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

```bash theme={"system"}
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)を参照してください。

<h3 id="users">
  Users
</h3>

対話形式で管理タスクを実行する場合は、個人の管理者クレデンシャルを使用します。HTTP の `Authorization` ヘッダーは `Basic <base64(username:API-KEY)>` の形式で作成します。

たとえば、`demo:p@55w0rd` として認証する場合は次のようになります。

```bash theme={"system"}
Authorization: Basic ZGVtbzpwQDU1dzByZA==
```

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

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

たとえば、APIキー `sa-p@55w0rd` で認証する場合は次のようになります。

```bash theme={"system"}
Authorization: Basic OnNhLXBANTV3MHJk
```

<h2 id="microsoft-entra-id-configuration">
  Microsoft Entra ID の設定
</h2>

Microsoft Entra ID から SCIM API を介して W\&B へのユーザーとグループの自動プロビジョニングを設定する場合は、このセクションを参照してください。

Entra SSO のセットアップについては、[Entra で SSO を設定する](/ja/products/wandb/platform/hosting/iam/sso)を参照してください。

<h3 id="tenant-url">
  Tenant URL
</h3>

Entra のエンタープライズ アプリケーションのプロビジョニング設定で、**Tenant URL** に、W\&B SCIM のベース URL の末尾に Entra の機能フラグ用クエリ パラメーター `aadOptscim062020` を付加した値を設定します。

```text theme={"system"}
[HOST-URL]/scim?aadOptscim062020
```

たとえば、インスタンスが `https://wandb.example.com` にある場合は、テナント URL を `https://wandb.example.com/scim?aadOptscim062020` に設定します。

`aadOptscim062020` パラメーターは、W\&B SCIM API で Entra 固有の処理を有効にします。このパラメーターを指定しない場合、Entra はユーザーの無効化リクエストで、JSON の真偽値 (`false` または `true`) ではなく文字列の真偽値 (`"False"` または `"True"`) を送信することがあり、無効化が失敗する原因になります。

**Secret Token** には、組織管理者ユーザーまたは組織スコープのサービスアカウントの APIキーを設定します。詳しくは、[認証](#authentication)を参照してください。

<Note>
  テナント URL に `aadOptscim062020` を追加すると、Microsoft Entra 管理センターにある Entra の **Provision on demand** UI からはユーザーを無効化できない場合があります。この UI は引き続き文字列の真偽値を送信するためです。無効化を手動でテストするには、`PatchOp` の `Operations` 形式で `active` を `false` に置き換える SCIM `PATCH` リクエストを送信してください ([ユーザーの無効化](#deactivate-user)を参照) 。
</Note>

<h3 id="team-names">
  チーム名
</h3>

W\&B のチームにマッピングする Entra グループには、`ml-platform` や `data-science` のように、小文字とハイフンを使用した名前を付けてください。W\&B に同期するグループの表示名には、スペース、アンダースコア、その他の特殊文字を使用しないでください。

<h3 id="user-attribute-mappings">
  ユーザー属性マッピング
</h3>

SCIM によるユーザープロビジョニング用に、Entra で次の属性マッピングを設定します。

| W\&B カスタムアプリの属性 | ソース属性 (Entra) | このマッピングを適用する | この属性を使用してオブジェクトを照合する |
| - | - | - | - |
| `emails[type eq "work"].value` | `mail` | Always | Yes |
| `active` | `Not([IsSoftDeleted])` | Always | |
| `displayName` | `displayName` | Always | |
| `userName` | `displayName` | オブジェクトの作成時のみ | |

<Note>
  **Multi-tenant Cloud** では、ユーザーのアカウントは組織によって管理されません。Multi-tenant Cloud では、W\&B は SCIM による `displayName` の更新をサポートしていません。詳しくは、[ユーザーの表示名を更新する](#update-user-display-name)を参照してください。
</Note>

<h3 id="group-attribute-mappings">
  グループの属性マッピング
</h3>

SCIM グループ (チーム) をプロビジョニングするには、Entra で次の属性マッピングを設定します。

| W\&B カスタムアプリの属性 | ソース属性 (Entra) | このマッピングを適用する | この属性を使用してオブジェクトを照合する |
| - | - | - | - |
| `displayName` | `displayName` | オブジェクトの作成時のみ | はい |
| `members` | `members` | 常に | |

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

SCIM のユーザーリソースは、W\&B のユーザーおよびサービスアカウントに対応します。このセクションのエンドポイントを使用すると、組織内のユーザーとサービスアカウントをプロビジョニング、更新、削除できます。たとえば、新入社員のオンボーディング、サービスの認証情報のローテーション、退職するユーザーのアクセス権の削除などの際に使用します。

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

<Note>
  **SCIM User JSON を解析するインテグレーションに影響する破壊的変更**

  * 専用クラウドおよびセルフマネージド v0.80.1 以降、ならびに 2026 年 4 月 30 日より後の Multi-tenant Cloud デプロイメントでは、`/scim/Users` からの応答 (ユーザーの `GET`、ユーザー一覧の `GET`、および User を返す `PATCH` の応答を含む) において、`emails` は SCIM 2.0 に準拠した形式でシリアル化されます。具体的には、小文字のフィールド名 (`value`、`primary`、およびオプションの `type` または `display`) を持つオブジェクトの JSON 配列になります。
  * 以前のリリースのデプロイメントでは、`emails` は PascalCase のキー (`Value`、`Primary` など) を持つ単一の JSON オブジェクトとして返されます。

  コードで SCIM の *応答* から `emails` を読み取る場合は、`emails` を配列として扱い、プライマリのエントリ (または最初の要素) を読み取ってください。

  ユーザーの作成や更新に使用するリクエストボディは以前から配列形式であり、変更はありません。`list-users` のフィルター `emails.value eq "..."` も変更されていません。
</Note>

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

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

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

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

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `GET`

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

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

<h4 id="example">
  例
</h4>

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

  <Tab title="ユーザー取得応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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` を返します。

    「アクティブ」の定義はデプロイメントタイプによって異なります。

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

<h3 id="list-users">
  ユーザーを一覧表示する
</h3>

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

<h4 id="filter-users">
  ユーザーをフィルターする
</h4>

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

* `userName eq "value"`: ユーザー名でフィルターします。
* `emails.value eq "value"`: メールアドレスでフィルターします。

<h5 id="example-2">
  例
</h5>

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

<h4 id="endpoint-2">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users`
* **メソッド**: `GET`

<h4 id="example-3">
  例
</h4>

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

  <Tab title="ユーザー一覧応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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` が返されます。

    「アクティブ」の定義はデプロイメントタイプによって異なります。

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

<h3 id="create-user">
  ユーザーを作成する
</h3>

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

<h4 id="endpoint-3">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users`
* **メソッド**: `POST`

<h4 id="parameters-2">
  パラメーター
</h4>

| パラメーター | タイプ | 必須 | 説明 |
| - | - | - | - |
| `emails` | array | はい | メールオブジェクトの配列。プライマリメールアドレスを含める必要があります。 |
| `userName` | string | はい | 新規ユーザーのユーザー名 |
| `modelsSeat` | string | いいえ | Models のシートレベル。`full`、`viewer`、`none` のいずれかを指定します。デフォルトは `full` です。 |
| `weaveRole` | string | いいえ | Weave のロールレベル。`full`、`viewer`、`none` のいずれかを指定します。デフォルトは `full` です。 |
| `registryAccess` | string | いいえ | Registry の利用権限。`enabled` または `none` のいずれかを指定します。省略した場合、実際のアクセス権は読み取り時に `modelsSeat` と `weaveRole` に基づいて決定されます。**Multi-tenant Cloud**、および v0.83.0 以降の**専用クラウド**と**セルフマネージド**で利用できます。 |

<h4 id="example-4">
  例
</h4>

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

    ```json theme={"system"}
    {
        "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={"system"}
    POST /scim/Users
    ```

    ```json theme={"system"}
    {
        "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>

<h4 id="response">
  応答
</h4>

<Tabs>
  <Tab title="ユーザー作成の応答（専用クラウド/セルフマネージド）">
    ```text theme={"system"}
    (Status 201)
    ```

    ```json theme={"system"}
    {
        "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）">
    ```text theme={"system"}
    (Status 201)
    ```

    ```json theme={"system"}
    {
        "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>

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

組織内にチームスコープまたは組織スコープのサービスアカウントを作成します。このエンドポイントは、オートメーション、CI/CD、インテグレーションなど、人間のユーザーに紐付けるべきでない用途向けにヘッドレスなアイデンティティを作成する場合に使用します。通常のユーザーを作成する場合は、`accountType` を省略してください。詳しくは [ユーザーを作成する](#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 アプリで APIキーを作成してください。
</Note>

<h4 id="endpoint-4">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users`
* **メソッド**: `POST`

<h4 id="parameters-3">
  パラメーター
</h4>

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

<h4 id="example-5">
  例
</h4>

<Tabs>
  <Tab title="チームサービスアカウントのプロビジョニングリクエスト">
    ```bash theme={"system"}
    POST /scim/Users
    ```

    ```json theme={"system"}
    {
        "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={"system"}
    POST /scim/Users
    ```

    ```json theme={"system"}
    {
        "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>

<h4 id="response-2">
  応答
</h4>

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

    ```json theme={"system"}
    {
        "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={"system"}
    (Status 201)
    ```

    ```json theme={"system"}
    {
        "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` が指定されていないか、無効な値が設定されています。

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

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

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

<h4 id="endpoint-5">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `DELETE`

<h4 id="parameters-4">
  パラメーター
</h4>

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

<h4 id="example-6">
  例
</h4>

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

  <Tab title="サービスアカウントのデプロビジョニング応答">
    ```text theme={"system"}
    (Status 204)
    ```
  </Tab>
</Tabs>

<h3 id="delete-user">
  ユーザーの削除
</h3>

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

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

  運用手順の策定に関する支援が必要な場合や、管理者アクセスをリストアする場合は、[サポート](mailto:forge-support@coreweave.com)にお問い合わせください。
</Warning>

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

<h4 id="endpoint-6">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `DELETE`

<h4 id="parameters-5">
  パラメーター
</h4>

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

<h4 id="example-7">
  例
</h4>

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

  <Tab title="ユーザー削除の応答">
    ```text theme={"system"}
    (Status 204)
    ```
  </Tab>
</Tabs>

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

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

ユーザーのプライマリメールアドレスを更新します。

**Multi-tenant Cloud ではサポートされません**。Multi-tenant Cloud では、ユーザーのアカウントは組織の管理対象外です。

<h4 id="endpoint-7">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-6">
  パラメーター
</h4>

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

<h4 id="example-8">
  例
</h4>

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

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

    ```json theme={"system"}
    {
        "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>

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

ユーザーの表示名を更新します。

**Multi-tenant Cloud ではサポートされていません**。Multi-tenant Cloud では、ユーザーのアカウントが組織によって管理されないためです。

<h4 id="endpoint-8">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-7">
  パラメーター
</h4>

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

<h4 id="example-9">
  例
</h4>

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

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

  <Tab title="表示名の更新応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

<h3 id="deactivate-user">
  ユーザーの無効化
</h3>

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

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

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

<h4 id="endpoint-9">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-8">
  パラメーター
</h4>

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

<h4 id="example-10">
  例
</h4>

<Tabs>
  <Tab title="ユーザーの無効化リクエスト（専用クラウド/セルフマネージド）">
    ```bash theme={"system"}
    PATCH /scim/Users/abc
    ```

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

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

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

<h4 id="response-3">
  応答
</h4>

<Tabs>
  <Tab title="ユーザーの無効化の応答（専用クラウド/セルフマネージド）">
    ```text theme={"system"}
    (Status 200)
    ```

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

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

<h3 id="reactivate-user">
  ユーザーを再有効化する
</h3>

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

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

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

<h4 id="endpoint-10">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-9">
  パラメーター
</h4>

| パラメーター | タイプ | 必須 | Description |
| - | - | - | - |
| `id` | string | Yes | 再有効化するユーザーの一意の ID |
| `op` | string | Yes | `replace` |
| `value` | object | Yes | `{"active": true}` を含むオブジェクト |

<h4 id="example-11">
  例
</h4>

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

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

  <Tab title="ユーザー再有効化の応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

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

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

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

<h4 id="endpoint-11">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-10">
  パラメーター
</h4>

| パラメーター | タイプ | 必須 | 説明 |
| - | - | - | - |
| `id` | string | Yes | ユーザーの一意の ID |
| `op` | string | Yes | `replace` |
| `path` | string | Yes | `organizationRole` |
| `value` | string | Yes | ロール名 (`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>

<h4 id="example-12">
  例
</h4>

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

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

  <Tab title="組織ロール割り当て応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

<h3 id="update-models-seat">
  Models シートを更新する
</h3>

ユーザーの Models シートを更新します。

<Note>
  **Multi-tenant Cloud**、および v0.83.0 以降の**専用クラウド**と**セルフマネージド**では、Registry アクセスは Models シートから切り離されています。ユーザーの `weaveRole` が `none` 以外の場合、`modelsSeat` を `none` に設定しても Registry アクセスは失効しなくなりました。これらのデプロイメントで Registry アクセスを失効させるには、[Registry アクセスを更新する](#update-registry-access)を使用して `registryAccess` を `none` に設定してください。

  v0.82.0 以前の**専用クラウド**および**セルフマネージド**では、Registry アクセスは引き続き `modelsSeat` と連動しています。これらのリリースで Registry アクセスを失効させるには、`modelsSeat` を `none` に設定してください。
</Note>

<h4 id="endpoint-12">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-11">
  パラメーター
</h4>

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

<h4 id="example-13">
  例
</h4>

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

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

  <Tab title="Models シート更新の応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

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

ユーザーの Weave ロールを更新します。

<h4 id="endpoint-13">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-12">
  パラメーター
</h4>

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

<h4 id="example-14">
  例
</h4>

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

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

  <Tab title="Weave ロール更新の応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

<h3 id="update-registry-access">
  Registry アクセスを更新する
</h3>

ユーザーに対する組織レベルの Registry アクセスを付与または失効させます。この権限は [Registry ロール](#add-to-registry) (`registryRoles`) とは別のものです。Registry ロールは、ユーザーに権限が付与された後のRegistryごとの権限を制御します。

**Multi-tenant Cloud**、および v0.83.0 以降の**専用クラウド**と**セルフマネージド**では、`modelsSeat` または `weaveRole` が `none` 以外のユーザーには、デフォルトで Registry の権限が付与されます。Models シートや Weave ロールを変更せずに Registry アクセスを失効させるには、`registryAccess` を `none` に設定します。

v0.82.0 以前の**専用クラウド**および**セルフマネージド**で Registry アクセスを失効させるには、[Models シートを更新する](#update-models-seat) を使用して `modelsSeat` を `none` に設定します。これらのリリースでは `registryAccess` 属性を使用できません。

作成時に `registryAccess` を省略した場合、ユーザーを読み取る際に、API がユーザーの `modelsSeat` と `weaveRole` から実効アクセス権を導出します。`registryAccess` の値を明示的に指定すると、この導出よりも優先されます。請求専用の組織ロールを持つユーザーには、この導出によって Registry アクセスは付与されません。

<h4 id="endpoint-14">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-13">
  パラメーター
</h4>

| パラメーター | タイプ | 必須 | 説明 |
| - | - | - | - |
| `id` | string | はい | ユーザーの一意の ID |
| `op` | string | はい | `replace` |
| `path` | string | はい | `registryAccess` |
| `value` | string | はい | Registry へのアクセス権限 (`enabled` または `none`) |

<h4 id="example-15">
  例
</h4>

<Tabs>
  <Tab title="Registry アクセス失効のリクエスト">
    ```bash theme={"system"}
    PATCH /scim/Users/abc
    ```

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

  <Tab title="Registry アクセス失効の応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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": "none",
        "weaveRole": "full",
        "registryAccess": "none"
    }
    ```
  </Tab>
</Tabs>

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

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

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

<h4 id="endpoint-15">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-14">
  パラメーター
</h4>

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

<h4 id="example-16">
  例
</h4>

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

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

    ```json theme={"system"}
    {
        "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>

<h3 id="add-to-registry">
  Registry への追加
</h3>

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

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

<h4 id="endpoint-16">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-15">
  パラメーター
</h4>

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

<h4 id="example-17">
  例
</h4>

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

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

    ```json theme={"system"}
    {
        "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>

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

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

<Note>
  この操作は、特定のRegistryからユーザーを削除するものです。組織レベルの Registry アクセスは失効しません。Registry アクセスを完全に失効させるには、[Registry アクセスを更新する](#update-registry-access) を使用してください。
</Note>

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

<h4 id="endpoint-17">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Users/{id}`
* **メソッド**: `PATCH`

<h4 id="parameters-16">
  パラメーター
</h4>

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

<h4 id="example-18">
  例
</h4>

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

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

    ```json theme={"system"}
    {
        "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="すべてのレジストリからの削除: リクエスト">
    ```bash theme={"system"}
    PATCH /scim/Users/abc
    ```

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

  <Tab title="すべてのレジストリからの削除: 応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

<h2 id="group-resource">
  Group リソース
</h2>

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

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

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

<h3 id="filter-groups">
  グループをフィルターする
</h3>

`/Groups` エンドポイントはフィルターをサポートしており、特定のチームを検索できます。

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

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

* `displayName eq "value"`: チームの表示名で絞り込みます。

<h4 id="example-19">
  例
</h4>

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

<h3 id="get-team">
  チームを取得する
</h3>

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

<h4 id="endpoint-18">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Groups/{id}`
* **メソッド**: `GET`

<h4 id="example-20">
  例
</h4>

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

  <Tab title="応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

<h3 id="list-teams">
  チームを一覧表示する
</h3>

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

<h4 id="endpoint-19">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Groups`
* **メソッド**: `GET`

<h4 id="example-21">
  例
</h4>

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

  <Tab title="応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

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

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

<h4 id="endpoint-20">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Groups`
* **メソッド**: `POST`

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

| フィールド | タイプ | 必須 |
| - | - | - |
| `displayName` | String | はい |
| `members` | Multi-Valued Array | はい (`value` サブフィールドは必須で、ユーザー ID に対応します) |
| `storageBucket` | Object | いいえ |

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

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

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

`provider` に無効な値を指定すると、`400 Bad Request` が返され、許可された値を示す SCIM エラーが含まれます。

<h4 id="examples">
  サンプル
</h4>

以下のサンプルでは、カスタムストレージを使用せずにチームを作成する方法と、特定のプロバイダーの BYOB ストレージを使用してチームを作成する方法を示します。目的のストレージ設定のタブを選択するとリクエスト例が、**応答** タブを選択すると応答例が表示されます。

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

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

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

    ```json theme={"system"}
    {
      "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={"system"}
    POST /scim/Groups
    Content-Type: application/scim+json
    ```

    ```json theme={"system"}
    {
      "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={"system"}
    POST /scim/Groups
    Content-Type: application/scim+json
    ```

    ```json theme={"system"}
    {
      "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={"system"}
    POST /scim/Groups
    Content-Type: application/scim+json
    ```

    ```json theme={"system"}
    {
      "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={"system"}
    (Status 201)
    ```

    ```json theme={"system"}
    {
        "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>

<h3 id="update-team">
  チームを更新する
</h3>

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

<h4 id="endpoint-21">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Groups/{id}`
* **メソッド**: `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>

<h3 id="replace-team-members">
  チームメンバーを置き換える
</h3>

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

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

<h4 id="endpoint-22">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Groups/{id}`
* **メソッド**: `PUT`

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

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

    ```json theme={"system"}
    {
        "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>

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

`dev-user2` を `acme-devs` に追加します。

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

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

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

  <Tab title="応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

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

`acme-devs` から `dev-user2` を削除します。

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

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

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

  <Tab title="応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

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

`acme-devs` からすべてのユーザーを削除します。

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

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

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

  <Tab title="応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

<h3 id="delete-team">
  チームを削除する
</h3>

チームには他のデータも紐付いているため、SCIM API ではチームの削除はサポートされていません。W\&B アプリからチームを削除し、関連するすべてのデータを削除してよいことを確認してください。

<h2 id="role-resource">
  Role リソース
</h2>

SCIM の role リソースは W\&B のカスタムロールに対応します。このセクションのエンドポイントを使用すると、カスタムロールをプログラムから作成および管理できます (たとえば、ロール定義をアクセスポリシーと同期させておく場合など) 。`/Roles` エンドポイントは公式の SCIM スキーマには含まれていません。W\&B では、W\&B 組織におけるカスタムロールの自動管理をサポートするために、独自に `/Roles` エンドポイントを追加しています。

<h3 id="get-custom-role">
  カスタムロールを取得する
</h3>

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

<h4 id="endpoint-23">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Roles/{id}`
* **メソッド**: `GET`

<h4 id="example-22">
  例
</h4>

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

  <Tab title="応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
        "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>

<h3 id="list-custom-roles">
  カスタムロールを一覧表示する
</h3>

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

<h4 id="endpoint-24">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Roles`
* **メソッド**: `GET`

<h4 id="example-23">
  例
</h4>

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

  <Tab title="応答">
    ```text theme={"system"}
    (Status 200)
    ```

    ```json theme={"system"}
    {
       "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>

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

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

<h4 id="endpoint-25">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Roles`
* **メソッド**: `POST`

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

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

<h4 id="example-24">
  例
</h4>

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

    ```json theme={"system"}
    {
        "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={"system"}
    (Status 201)
    ```

    ```json theme={"system"}
    {
        "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>

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

以下のセクションでは、既存のカスタムロールに対して権限を追加または削除する方法について説明します。

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

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

<h5 id="endpoint-26">
  エンドポイント
</h5>

* **URL**: `[HOST-URL]/scim/Roles/{id}`
* **メソッド**: `PATCH`

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

    ```json theme={"system"}
    {
        "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="応答">
    ```text theme={"system"}
    (Status 200)
    ```

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

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

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

<h5 id="endpoint-27">
  エンドポイント
</h5>

* **URL**: `[HOST-URL]/scim/Roles/{id}`
* **メソッド**: `PATCH`

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

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

  <Tab title="応答">
    ```text theme={"system"}
    (Status 200)
    ```

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

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

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

<h4 id="endpoint-28">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Roles/{id}`
* **メソッド**: `PUT`

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

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

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

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

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

<h4 id="endpoint-29">
  エンドポイント
</h4>

* **URL**: `[HOST-URL]/scim/Roles/{id}`
* **メソッド**: `DELETE`

<h4 id="example-25">
  例
</h4>

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

  <Tab title="応答">
    ```text theme={"system"}
    (Status 204 No Content)
    ```
  </Tab>
</Tabs>

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

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

<h3 id="etag-support">
  ETag のサポート
</h3>

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

<h4 id="etags">
  ETags
</h4>

ETag を使用するには、次の手順に従います。

1. **現在の ETag を取得する**: リソースを GET したときに、応答に含まれる ETag ヘッダーの値を控えておきます。
2. **条件付き更新**: 更新時に、その ETag を `If-Match` ヘッダーに含めます。

<h4 id="example-26">
  例
</h4>

```text theme={"system"}
# ユーザーを取得し、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` エラー応答は、リソースの取得後にそのリソースが変更されたことを示します。

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

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 (内部サーバーエラー) |

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

W\&B は 2 つの異なる SCIM API 実装を保守しており、それぞれで利用できる機能が異なります。SCIM と統合する前に次の表を参照し、必要な操作がお使いのデプロイメントタイプで利用できるかどうかを確認してください。

| 機能 | Multi-tenant Cloud | 専用クラウドおよびセルフマネージド |
| - | - | - |
| ユーザーのメールアドレスの更新 | - | ✓ |
| ユーザーの表示名の更新 | - | ✓ |
| ユーザーの無効化 | ✓ | ✓ |
| ユーザーの再有効化 | - | ✓ |
| 1 ユーザーあたり複数のメールアドレス | ✓ | - |
| 作成時/更新時の `modelsSeat` の設定 | ✓ | ✓ |
| 作成時/更新時の `weaveRole` の設定 | ✓ | ✓ |
| 作成時/更新時の `registryAccess` の設定 | ✓ | ✓ |
| `modelsSeat: none` による Registry アクセスの失効 | - | ✓ |
| `registryAccess: none` による Registry アクセスの失効 | ✓ | ✓ |

<h2 id="limitations">
  制限事項
</h2>

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

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