System for Cross-domain Identity Management (SCIM) API を使用すると、W&B インスタンスまたは組織の管理者は、W&B 組織内のユーザー、グループ、およびカスタムロールを管理できます。SCIM グループは W&B の Teams に対応します。
W&B の SCIM API は Okta を含む主要なアイデンティティプロバイダーと互換性があり、ユーザーの自動プロビジョニングおよびデプロビジョニングを可能にします。Okta やその他のアイデンティティプロバイダーとの SSO 設定については、SSO ドキュメント を参照してください。
SCIM API の利用方法を示す実用的な Python のサンプルについては、wandb-scim リポジトリを参照してください。
- フィルタリング: API は
/Users および /Groups エンドポイントでのフィルタリングをサポートします
- PATCH 操作: リソースの一部更新のための PATCH をサポートします
- ETag サポート: 競合検出のために ETag を使用した条件付き更新をサポートします
- サービスアカウント認証: 組織のサービスアカウントが API にアクセスできます
複数の Enterprise Multi-tenant SaaS 組織の管理者である場合は、SCIM API リクエストを送信する組織を設定しておく必要があります。これにより、あなたの APIキー を使用して送信される SCIM API リクエストが正しい組織に対して行われるようになります。プロフィール画像をクリックし、User Settings をクリックして、Default API organization 設定を確認してください。選択したホスティングオプションに応じて、このページの例で使用される <host-url> プレースホルダの値が決まります。また、例では abc や def といったユーザー ID を使用しています。実際のリクエストおよびレスポンスでは、ユーザー ID にはハッシュ化された値が使用されます。
主な違いを確認したうえで、ユーザー ID で認証するかサービスアカウントで認証するかを選択します。
- 想定される利用者: Users は対話的で一度きりの管理作業に最適で、サービスアカウントは自動化やインテグレーション(CI/CD、プロビジョニングツール)に最適です。
- 認証情報: Users はユーザー名と APIキー を送信し、サービスアカウントは APIキー のみを送信します(ユーザー名なし)。
- Authorization ヘッダーのペイロード: Users は
username:API-KEY をエンコードし、サービスアカウントは :API-KEY(先頭にコロン)をエンコードします。
- スコープと権限: どちらも管理者権限が必要です。サービスアカウントは組織スコープかつヘッドレスであり、自動化のためにより明確な監査証跡を提供します。
- 認証情報の取得場所: Users は User Settings から自分の APIキー をコピーします。サービスアカウントキーは組織の Service account タブにあります。
- Multi-tenant Cloud: 複数の Multi-tenant Cloud 組織へのアクセス権がある場合、SCIM API 呼び出しが意図した組織にルーティングされるように、「Default API organization」を必ず設定する必要があります。
対話的な管理タスクを実行する際は、個人の管理者認証情報を使用してください。HTTP の Authorization ヘッダーは Basic <base64(username:API-KEY)> の形式で設定します。
例えば、demo:p@55w0rd という資格情報で認証する場合は次のように指定します:
Authorization: Basic ZGVtbzpwQDU1dzByZA==
自動化やインテグレーションには、組織スコープのサービスアカウントを使用します。HTTP Authorization ヘッダーは Basic <base64(:API-KEY)> の形式で設定します(先頭のコロンと空のユーザー名に注意してください)。サービスアカウントの APIキー は、組織のダッシュボードの Service account タブで確認できます。組織スコープのサービスアカウント を参照してください。
例として、APIキー sa-p@55w0rd を用いて認証する場合:
Authorization: Basic OnNhLXBANTV3MHJk
SCIM の user リソースは W&B のユーザーに対応します。これらのエンドポイントを使用して、組織内のユーザーを管理します。
組織内の特定のユーザーに関する情報を取得します。
- URL:
<host-url>/scim/Users/{id}
- Method: GET
| Parameter | Type | Required | Description |
|---|
id | string | Yes | ユーザーを一意に識別する ID |
{
"active": true,
"daysActive": 42,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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 を返します。
「アクティブ」の定義はデプロイメントタイプによって異なります。
- Dedicated Cloud / Self-Managed: ユーザーがサインインし、W&B アプリの任意のページを開く、run をログする、SDK を使用する、または何らかの形で W&B サーバーとやり取りした場合に、アクティブと見なされます。
- Multi-tenant Cloud: ユーザーが 2025 年 5 月 8 日以降に、組織スコープの監査対象アクションを実行した場合に、アクティブと見なされます。完全な一覧は Audit logging actions を参照してください。
組織内のすべてのユーザーの一覧を取得します。
/Users エンドポイントでは、ユーザー名またはメールアドレスでユーザーをフィルタリングできます:
userName eq "value" - ユーザー名でフィルタリング
emails.value eq "value" - メールアドレスでフィルタリング
例
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
List Users リクエスト
List Users レスポンス
{
"Resources": [
{
"active": true,
"daysActive": 42,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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 を返します。
「アクティブ」の定義はデプロイメントタイプによって異なります。
- Dedicated Cloud / Self-Managed: ユーザーがサインインする、W&B App の任意のページを開く、run をログに記録する、SDK を使用する、または何らかの形で W&B サーバーとやり取りした場合にアクティブと見なされます。
- Multi-tenant Cloud: 2025年5月8日以降に、組織スコープの監査対象アクションを実行した場合にアクティブと見なされます。アクションの全一覧は Audit logging actions を参照してください。
自組織内で新しいユーザーを作成します。
- URL:
<host-url>/scim/Users
- Method: POST
| パラメーター | 型 | 必須 | 説明 |
|---|
emails | array | Yes | メールオブジェクトの配列。プライマリのメールアドレスを必ず含めてください |
userName | string | Yes | 新規ユーザーのユーザー名 |
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"emails": [
{
"primary": true,
"value": "dev-user2@example.com"
}
],
"userName": "dev-user2"
}
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:teams:2.0:User"
],
"emails": [
{
"primary": true,
"value": "dev-user2@example.com"
}
],
"userName": "dev-user2",
"urn:ietf:params:scim:schemas:extension:teams:2.0:User": {
"teams": ["my-team"]
}
}
ユーザー作成レスポンス(専用/セルフマネージド)
ユーザー作成レスポンス(マルチテナント)
{
"active": true,
"displayName": "Dev User 2",
"emails": {
"Value": "dev-user2@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"id": "def",
"meta": {
"resourceType": "User",
"created": "2023-10-01T00:00:00Z",
"location": "Users/def"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "dev-user2"
}
{
"active": true,
"displayName": "Dev User 2",
"emails": {
"Value": "dev-user2@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"id": "def",
"meta": {
"resourceType": "User",
"created": "2023-10-01T00:00:00Z",
"location": "Users/def"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:teams:2.0:User"
],
"userName": "dev-user2",
"organizationRole": "member",
"teamRoles": [
{
"teamName": "my-team",
"roleName": "member"
}
],
"groups": [
{
"value": "my-team-id"
}
]
}
管理者アクセスを維持するインスタンスまたは組織内に、常に少なくとも 1 人の管理者ユーザーが存在するようにしてください。そうしないと、どのユーザーも組織の W&B アカウントを設定または管理できなくなります。組織が SCIM やその他の自動化されたプロセスを使用して W&B のユーザーのプロビジョニング解除(削除)を行っている場合、プロビジョニング解除の操作によって、インスタンスまたは組織から最後の管理者が誤って削除されてしまう可能性があります。運用手順の策定に関する支援や管理者アクセスの復元については、support までお問い合わせください。
組織からユーザーを完全に削除します。
この操作はユーザーに対してのみ適用され、サービスアカウントには使用できません。サービスアカウントは、W&B Team の設定から削除してください。
- URL:
<host-url>/scim/Users/{id}
- メソッド: DELETE
| パラメーター | 型 | 必須 | 説明 |
|---|
id | string | Yes | 削除するユーザーの一意の ID |
ユーザーの削除リクエスト
ユーザーの削除レスポンス
一時的にユーザーを無効化するには、PATCH エンドポイントを使用する ユーザーの無効化 API を参照してください。
ユーザーのプライマリメールアドレスを更新します。
Multi-tenant Cloud ではサポートされません。Multi-tenant Cloud では、ユーザーアカウントは組織によって管理されないためです。
- URL:
<host-url>/scim/Users/{id}
- Method: PATCH
| パラメーター | 型 | 必須 | 説明 |
|---|
id | string | Yes | ユーザーの一意の ID |
op | string | Yes | replace |
path | string | Yes | emails |
value | array | Yes | 新しいメールアドレスオブジェクトを含む配列 |
メールアドレス更新リクエスト
メールアドレス更新レスポンス
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "emails",
"value": [
{
"value": "newemail@example.com",
"primary": true
}
]
}
]
}
{
"active": true,
"displayName": "Dev User 1",
"emails": {
"Value": "newemail@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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"
}
ユーザーの表示名を更新します。
Multi-tenant Cloud ではサポートされていません。この環境ではユーザーのアカウントは組織によって管理されません。
- URL:
<host-url>/scim/Users/{id}
- メソッド: PATCH
| パラメーター名 | 型 | 必須 | 説明 |
|---|
id | string | Yes | ユーザーの一意の ID |
op | string | Yes | replace |
path | string | Yes | displayName |
value | string | Yes | 新しい表示名 |
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "displayName",
"value": "John Doe"
}
]
}
{
"active": true,
"displayName": "John Doe",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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"
}
組織内のユーザーを無効化します。実際の挙動はデプロイメントタイプによって異なります。
- Dedicated Cloud / Self-Managed: ユーザーの
active フィールドを false に設定します。無効化されたユーザーの組織へのアクセスを復元するには、「ユーザーの再有効化」を参照してください。
- Multi-tenant Cloud: ユーザーを組織から削除します。ユーザーのアクセスを復元するには、そのユーザーを組織に再度追加してください。「ユーザーの作成」を参照してください。Multi-tenant Cloud では、ユーザーのアカウントは組織によって管理されません。
この操作はユーザーのみに対して実行でき、サービスアカウントには適用されません。サービスアカウントの無効化には対応していません。チームのサービスアカウントは、W&B Team の設定で管理してください。
- URL:
<host-url>/scim/Users/{id}
- メソッド: PATCH
| パラメーター | 型 | 必須 | 説明 |
|---|
id | string | Yes | 無効化するユーザーの一意の ID |
op | string | Yes | replace |
value | object | Yes | {"active": false} を持つオブジェクト |
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"value": {"active": false}
}
]
}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"value": {"active": false}
}
]
}
{
"active": false,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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"
}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"value": {"active": true}
}
]
}
組織内で以前に無効化されたユーザーを再有効化します。
-
ユーザーの再有効化はユーザーに対してのみ有効で、サービスアカウントには対応していません。サービスアカウントの再有効化はサポートされていません。サービスアカウントは W&B Team の設定で管理してください。
-
ユーザーの再有効化は Multi-tenant Cloud ではサポートされていません。ユーザーのアクセスを復元するには、そのユーザーを組織に再度追加してください。Create user を参照してください。Multi-tenant Cloud では、ユーザーのアカウントは組織によって管理されません。ユーザーを再有効化しようとすると、HTTP
400 エラーが返されます:
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"detail": "User reactivation operations are not supported in SaaS Cloud",
"status": "400"
}
- URL:
<host-url>/scim/Users/{id}
- Method: PATCH
| Parameter | Type | Required | Description |
|---|
id | string | Yes | 再有効化するユーザーの一意のID |
op | string | Yes | replace |
value | object | Yes | {"active": true} を持つオブジェクト |
ユーザー再有効化リクエスト
ユーザー再有効化レスポンス
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"value": {"active": true}
}
]
}
{
"active": true,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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"
}
ユーザーに組織レベルのロールを割り当てます。
この操作はユーザーに対してのみ有効であり、サービスアカウントには使用できません。サービスアカウントではカスタムロールはサポートされていません。
- URL:
<host-url>/scim/Users/{id}
- Method: PATCH
| Parameter | Type | Required | Description |
|---|
id | string | Yes | ユーザーの一意の ID |
op | string | Yes | replace |
path | string | Yes | organizationRole |
value | string | Yes | ロール名(admin または member) |
組織スコープの viewer ロールは非推奨であり、UI から新たに割り当てることはできません。SCIM を使用してユーザーに viewer ロールを割り当てた場合:
- 組織内では
member ロールが割り当てられます。
- Models では
full シートではなく viewer シートが割り当てられます。これにより、Models には閲覧専用でアクセスでき、Registry にはフルアクセスできます。利用可能な Models シートがない場合は「Seat limit reached」エラーが記録され、そのメンバーは Models へのアクセスなしで追加されます。シートが利用可能になれば後から更新できます。
- Weave では
full シートではなく viewer シートが割り当てられます。これにより、Weave には閲覧専用でアクセスできます。利用可能な Weave シートがない場合は「Seat limit reached」エラーが記録され、そのメンバーは Weave へのアクセスなしで追加されます。シートが利用可能になれば後から更新できます。
- 組織レベルで表示可能なレジストリに対して、Registry の
viewer ロールが割り当てられます。
組織ロール割り当てリクエスト
組織ロール割り当てレスポンス
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "organizationRole",
"value": "admin"
}
]
}
{
"active": true,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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"
}
ユーザーにチームレベルのロールを割り当てます。
この操作はユーザーに対してのみ有効であり、サービスアカウントには使用できません。サービスアカウントではカスタムロールはサポートされていません。
- URL:
<host-url>/scim/Users/{id}
- Method: PATCH
| Parameter | Type | Required | Description |
|---|
id | string | Yes | ユーザーの一意の ID |
op | string | Yes | replace を指定 |
path | string | Yes | teamRoles を指定 |
value | array | Yes | teamName と roleName を含むオブジェクトの配列 |
チームロールの割り当てリクエスト
チームロールの割り当てレスポンス
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "teamRoles",
"value": [
{
"roleName": "admin",
"teamName": "team1"
}
]
}
]
}
{
"active": true,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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"
}
レジストリレベルのロールを割り当てて、ユーザーをレジストリに追加します。
この操作はユーザーに対してのみ有効で、サービスアカウントには使用できません。カスタムロールはサービスアカウントではサポートされません。
- URL:
<host-url>/scim/Users/{id}
- Method: PATCH
| パラメーター | 型 | 必須 | 説明 |
|---|
id | string | Yes | ユーザーの一意の ID |
op | string | Yes | add |
path | string | Yes | registryRoles |
value | array | Yes | registryName と roleName を持つオブジェクトの配列 |
Registry への追加リクエスト
Registry への追加レスポンス
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "registryRoles",
"value": [
{
"roleName": "admin",
"registryName": "hello-registry"
}
]
}
]
}
{
"active": true,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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"
}
ユーザーをレジストリから削除します。
- 削除操作は RFC 7644 の SCIM プロトコル仕様に従います。特定のレジストリからユーザーを削除するには、フィルター構文
"registryRoles[registryName eq \"{registry_name}\"]" を使用します。ユーザーをすべてのレジストリから削除するには "registryRoles" を使用します。
- この操作はユーザーに対してのみ有効であり、サービスアカウントには使用できません。サービスアカウントをレジストリから削除するには、W&B Team の設定から削除してください。
- URL:
<host-url>/scim/Users/{id}
- Method: PATCH
| Parameter | Type | Required | Description |
|---|
id | string | Yes | ユーザーの一意の ID |
op | string | Yes | remove |
path | string | Yes | "registryRoles[registryName eq \"{registry_name}\"]" または "registryRoles" |
レジストリからの削除リクエスト
レジストリからの削除レスポンス
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "registryRoles[registryName eq \"goodbye-registry\"]"
}
]
}
{
"active": true,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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"
}
すべてのレジストリからの削除リクエスト
すべてのレジストリからの削除レスポンス
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "registryRoles"
}
]
}
{
"active": true,
"displayName": "Dev User 1",
"emails": {
"Value": "dev-user1@example.com",
"Display": "",
"Type": "",
"Primary": true
},
"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"
}
IAM で SCIM グループを作成すると、対応する W&B の Team が作成されてそのグループにマッピングされ、以降の SCIM グループ操作はその Team に対して実行されます。
SCIM を使用して W&B Team が作成されると、組織レベルのすべてのサービスアカウントが自動的にそのチームに追加され、サービスアカウントのチームリソースへのアクセス権が維持されます。
/Groups エンドポイントでは、特定の Teams を検索するためのフィルタリングが可能です。
displayName eq "value" - チームの表示名でフィルタリングします
GET /scim/Groups?filter=displayName eq "engineering-team"
チームの一意の ID を指定して、チームの情報を取得します。
- URL:
<host-url>/scim/Groups/{id}
- メソッド: GET
{
"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"
]
}
Teams の一覧を取得します。
- URL:
<host-url>/scim/Groups
- メソッド: GET
{
"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
}
- Endpoint:
<host-url>/scim/Groups
- Method: POST
- Description: 新しいチームリソースを作成します。
- Supported Fields: サポートされているフィールド
| Field | Type | Required |
|---|
displayName | String | はい |
members | 複数値配列 (Multi-Valued Array) | はい(value サブフィールドは必須で、ユーザー ID にマッピングされます) |
メンバーとして dev-user2 を持つ wandb-support という名前のチームを作成します。
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "wandb-support",
"members": [
{
"value": "def"
}
]
}
{
"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"
]
}
- Endpoint:
<host-url>/scim/Groups/{id}
- Method: PATCH
- Description: 既存のチームのメンバー一覧を更新します。
- Supported Operations: メンバーの
add、メンバーの remove、メンバーの replace
-
remove 操作は RFC 7644 SCIM プロトコル仕様に準拠しています。特定のユーザーを削除するにはフィルター構文
members[value eq "{user_id}"] を使用し、チームからすべてのユーザーを削除するには members を使用します。
ユーザー識別方法: メンバー操作における {user_id} には、次のいずれかを指定できます:
-
これらの操作はユーザーに対してのみ有効で、サービスアカウントには使用できません。チームのサービスアカウントは W&B Team の設定で更新してください。
リクエストでは、{team_id} を実際のチーム ID に、{user_id} を実際のユーザー ID またはメールアドレスに置き換えてください。
チームのすべてのメンバーを新しいリストで置き換えます。
この操作はユーザーにのみ適用され、サービスアカウントには適用されません。サービスアカウントは W&B Team の設定で管理します。
- Endpoint:
<host-url>/scim/Groups/{id}
- Method: PUT
- Description: チームのメンバーリスト全体を置き換えます。
PUT /scim/Groups/{team_id}
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "acme-devs",
"members": [
{
"value": "{user_id_1}"
},
{
"value": "{user_id_2}"
}
]
}
{
"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"
]
}
ユーザーをチームに追加する
acme-devs に dev-user2 を追加する場合:
この操作はユーザーにのみ適用され、サービスアカウントには適用されません。サービスアカウントは W&B Team の設定で管理します。
PATCH /scim/Groups/{team_id}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "add",
"path": "members",
"value": [
{
"value": "{user_id}"
}
]
}
]
}
{
"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"
]
}
特定のユーザーをチームから削除する
acme-devs から dev-user2 を削除する場合:
この操作はユーザーにのみ適用され、サービスアカウントには適用されません。サービスアカウントは W&B Team の設定で管理します。
PATCH /scim/Groups/{team_id}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "remove",
"path": "members[value eq \"{user_id}\"]"
}
]
}
{
"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"
]
}
チームからすべてのユーザーを削除する
acme-devs からすべてのユーザーを削除するには、次のようにします。
この操作はユーザーにのみ適用され、サービスアカウントには適用されません。サービスアカウントは W&B チームの設定で管理してください。
PATCH /scim/Groups/{team_id}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "remove",
"path": "members"
}
]
}
{
"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"
]
}
- Teams には追加の関連データが紐づいているため、現時点では SCIM API から Teams を削除することはできません。すべての関連データも含めて削除することを明示的に確認するために、アプリから Teams を削除してください。
SCIM のロールリソースは W&B のカスタムロールに対応します。前述のとおり、/Roles エンドポイントは公式の SCIM スキーマには含まれていませんが、W&B では組織内のカスタムロールを自動管理できるようにするために /Roles エンドポイントを追加しています。
カスタムロールの一意の ID を指定して、そのロールの情報を取得します。
- URL:
<host-url>/scim/Roles/{id}
- Method: GET
{
"description": "カスタムロールのサンプル",
"id": "Um9sZTo3",
"inheritedFrom": "member", // 事前定義済みロールを表します
"meta": {
"resourceType": "Role",
"created": "2023-11-20T23:10:14Z",
"lastModified": "2023-11-20T23:31:23Z",
"location": "Roles/Um9sZTo3"
},
"name": "サンプルカスタムロール",
"organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
"permissions": [
{
"name": "artifact:read",
"isInherited": true // member の事前定義済みロールから継承されています
},
...
...
{
"name": "project:update",
"isInherited": false // 管理者によって追加されたカスタム権限です
}
],
"schemas": [
""
]
}
W&B 組織のすべてのカスタムロールの情報を取得します。
- URL:
<host-url>/scim/Roles
- メソッド: GET
{
"Resources": [
{
"description": "カスタムロールのサンプル",
"id": "Um9sZTo3",
"inheritedFrom": "member", // カスタムロールが継承している事前定義ロールを示します
"meta": {
"resourceType": "Role",
"created": "2023-11-20T23:10:14Z",
"lastModified": "2023-11-20T23:31:23Z",
"location": "Roles/Um9sZTo3"
},
"name": "サンプルカスタムロール",
"organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
"permissions": [
{
"name": "artifact:read",
"isInherited": true // member の事前定義ロールから継承されています
},
...
...
{
"name": "project:update",
"isInherited": false // 管理者によって追加されたカスタム権限です
}
],
"schemas": [
""
]
},
{
"description": "別のカスタムロールのサンプル",
"id": "Um9sZToxMg==",
"inheritedFrom": "viewer", // カスタムロールが継承している事前定義ロールを示します
"meta": {
"resourceType": "Role",
"created": "2023-11-21T01:07:50Z",
"location": "Roles/Um9sZToxMg=="
},
"name": "サンプルカスタムロール 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
}
- エンドポイント:
<host-url>/scim/Roles
- メソッド: POST
- 説明: W&B の組織に新しいカスタムロールを作成します。
- サポートされるフィールド:
| Field | Type | Required |
|---|
name | String | カスタムロールの名前 |
description | String | カスタムロールの説明 |
permissions | Object array | 権限オブジェクトの配列。各オブジェクトには、w&bobject:operation 形式の値を持つ文字列フィールド name が含まれます。たとえば、W&B の run を削除する操作の権限オブジェクトでは、name は run:delete となります。 |
inheritedFrom | String | このカスタムロールが継承する事前定義ロール。member または viewer のいずれかを指定します。 |
{
"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"
}
{
"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": [
""
]
}
- Endpoint:
<host-url>/scim/Roles/{id}
- Method: PATCH
- Description: 既存のカスタムロールに権限を追加します。
PATCH /scim/Roles/{role_id}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "add",
"path": "permissions",
"value": [
{
"name": "project:delete"
},
{
"name": "run:stop"
}
]
}
]
}
- Endpoint:
<host-url>/scim/Roles/{id}
- Method: PATCH
- Description: 既存のカスタムロールから権限を削除します。
PATCH /scim/Roles/{role_id}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "remove",
"path": "permissions",
"value": [
{
"name": "project:update"
}
]
}
]
}
- Endpoint:
<host-url>/scim/Roles/{id}
- Method: PUT
- Description: カスタムロール定義全体を置き換えます。
PUT /scim/Roles/{role_id}
{
"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"
}
W&B 組織内のカスタムロールを削除します。慎重に実行してください。この操作を行うと、カスタムロールの継承元となっていた事前定義ロールが、操作前にそのカスタムロールが割り当てられていたすべてのユーザーに再度割り当てられます。
- URL:
<host-url>/scim/Roles/{id}
- Method: DELETE
SCIM API は、同時変更による競合を防止するための条件付き更新で ETag をサポートします。ETag は ETag レスポンスヘッダーと meta.version フィールドで返されます。
ETag を使用するには:
- 現在の ETag を取得: リソースを GET するとき、レスポンスの ETag ヘッダーを控えておきます
- 条件付き更新: 更新時に、その ETag を
If-Match ヘッダーに含めます
# ユーザーを取得して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 エラー応答は、リソースを取得してからその内容が変更されたことを示します。
SCIM API は標準的な SCIM エラー応答を返します:
| ステータスコード | 説明 |
|---|
200 | 成功 |
201 | 作成 |
204 | コンテンツなし(削除に成功) |
400 | 不正なリクエスト - 無効なパラメータまたはリクエストボディ |
401 | 認証エラー - 認証に失敗 |
403 | アクセス拒否 - 権限が不足しています |
404 | 見つかりません - リソースが存在しません |
409 | 競合 - リソースがすでに存在します |
412 | 前提条件失敗 - ETag が一致しません |
500 | サーバー内部エラー |
W&B では 2 つの独立した SCIM API 実装を提供しており、それぞれで利用できる機能が異なります。
| 機能 | Dedicated Cloud | Self-Managed |
|---|
| ユーザーのメールアドレスの更新 | - | ✓ |
| ユーザーの表示名の更新 | - | ✓ |
| ユーザーの無効化 | ✓ | ✓ |
| ユーザーの再有効化 | - | ✓ |
| ユーザーごとの複数メールアドレス対応 | ✓ | - |
- 最大結果数: リクエストごとに最大 9999 個のアイテムまで。
- シングルテナント環境: 1 ユーザーあたりメールアドレスは 1 件のみサポートされます。
- チーム削除: SCIM 経由ではサポートされません(W&B の Web インターフェースを使用してください)。
- ユーザーの再有効化: マルチテナントクラウド環境ではサポートされていません。
- シート上限: 組織のシート上限に達している場合は、操作が失敗することがあります。