System for Cross-domain Identity Management (SCIM) API を使用すると、インスタンス管理者または組織管理者は、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 マルチテナント SaaS 組織の管理者である場合は、APIキーを使用して送信した SCIM API リクエストが正しい組織に適用されるよう、SCIM API リクエストの送信先となる組織を設定する必要があります。プロフィール画像をクリックし、User Settings をクリックしてから、Default API organization の設定を確認してください。選択したホスティングオプションによって、このページの例で使用する <host-url> プレースホルダーの値が決まります。また、例では abc や def などのユーザー ID を使用しています。実際のリクエストとレスポンスでは、ユーザー ID にはハッシュ化された値が使用されます。
主な違いを確認したうえで、ユーザーのアイデンティティまたはサービスアカウントのどちらを使用して認証するかを選択します。
- 適した用途: Users は対話的な単発の管理操作に適しており、サービスアカウントは自動化やインテグレーション (CI/CD、プロビジョニングツール) に適しています。
- 認証情報: Users はユーザー名と APIキー を送信します。サービスアカウントは APIキー のみを送信します (ユーザー名は不要です) 。
- Authorization header のペイロード: Users は
username:API-KEY をエンコードし、サービスアカウントは :API-KEY をエンコードします (先頭にコロンが付きます) 。
- スコープと権限: どちらも管理者権限が必要です。サービスアカウントは組織スコープのヘッドレスなアカウントであるため、自動化においてより明確な監査証跡を提供します。
- 認証情報の取得場所: Users は User Settings から APIキー をコピーします。サービスアカウントのキーは組織の Service account タブにあります。
- Multi-tenant Cloud: 複数の Multi-tenant Cloud 組織にアクセスできる場合は、SCIM API calls が意図した組織にルーティングされるよう、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 のユーザーリソースは、W&B の Users に対応しています。これらの endpoints を使用して、組織内の Users を管理します。
組織内の特定のユーザーに関する情報を取得します。
この操作では、サービスアカウントの情報は取得されません。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- method: GET
| パラメーター | タイプ | 必須 | 説明 |
|---|
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 が返されます。
「active」の定義はデプロイタイプによって異なります。
- 専用クラウド / セルフマネージド: ユーザーがサインインする、W&B App のいずれかのページを開く、run をログする、SDK を使用する、または何らかの形で W&B Server とやり取りした場合、そのユーザーはアクティブとみなされます。
- Multi-tenant Cloud: ユーザーが 2025 年 5 月 8 日以降に、組織スコープの監査可能なアクションを実行した場合、そのユーザーはアクティブとみなされます。完全な一覧については、Audit logging actions を参照してください。
組織内のすべてのユーザーの一覧を取得します。
/Users エンドポイントでは、ユーザー名またはメールアドレスで 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
Users一覧リクエスト
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 を返します。
active の定義はデプロイタイプによって異なります。
- 専用クラウド / セルフマネージド: ユーザーは、サインインする、W&B App の任意のページを開く、run をログする、SDK を使用する、または何らかの形で W&B Server とやり取りした場合にアクティブと見なされます。
- Multi-tenant Cloud: ユーザーは、2025年5月8日以降に組織を対象とする監査可能な操作を実行した場合にアクティブと見なされます。完全な一覧については、監査ログのアクションを参照してください。
組織内に新しいユーザーを作成します。
エンドポイント
- URL:
<host-url>/scim/Users
- method: POST
| パラメーター | タイプ | 必須 | 説明 |
|---|
emails | array | はい | メールオブジェクトの配列。メインメールアドレスを含める必要があります |
userName | string | はい | 新規ユーザーのユーザー名 |
{
"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 からユーザーのプロビジョニングを解除している場合、その解除処理によって、意図せずインスタンスまたは組織に残っている最後の管理者が削除される可能性があります。運用手順の策定に関する支援、または管理者アクセスの復旧については、サポート にお問い合わせください。
組織からユーザーを完全に削除します。
この操作はユーザーにのみ適用され、サービスアカウントには使用できません。サービスアカウントは W&B Team の Settings で削除してください。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- method: DELETE
| パラメーター | タイプ | 必須 | 説明 |
|---|
id | string | はい | 削除するユーザーの一意の ID |
ユーザーを削除するリクエスト
ユーザーを削除するレスポンス
ユーザーを一時的に無効化するには、PATCH エンドポイントを使用する ユーザーの無効化 API を参照してください。
ユーザーのメインメールアドレスを更新します。
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}
- method: PATCH
| パラメーター | タイプ | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | replace |
path | string | はい | displayName |
value | string | はい | 新しい表示名 |
{
"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"
}
組織内のユーザーを無効化します。実際の結果は、デプロイタイプによって異なります。
- 専用クラウド / セルフマネージド: ユーザーの
active フィールドを false に設定します。無効化したユーザーの組織へのアクセスを復元するには、ユーザーを再有効化 を参照してください。
- Multi-tenant Cloud: 組織からユーザーを削除します。ユーザーのアクセスを復元するには、そのユーザーを組織に再度追加してください。ユーザーを作成 を参照してください。Multi-tenant Cloud では、ユーザーのアカウントは組織では管理されません。
この操作はユーザーにのみ使用でき、サービスアカウントには対応していません。サービスアカウントの無効化はサポートされていません。チームのサービスアカウントは、W&B Team の Settings で管理してください。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- method: PATCH
| パラメーター | タイプ | 必須 | 説明 |
|---|
id | string | はい | 無効化するユーザーの一意の ID |
op | string | はい | replace |
value | object | はい | {"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 ではサポートされません。ユーザーのアクセスを復元するには、そのユーザーを組織に再度追加してください。ユーザーを作成 を参照してください。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
| パラメーター | タイプ | 必須 | 説明 |
|---|
id | string | はい | 再有効化するユーザーの一意の ID |
op | string | はい | replace |
value | object | はい | {"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
| パラメーター | タイプ | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | replace |
path | string | はい | organizationRole |
value | string | はい | ロール名 (admin または member) |
組織スコープの viewer ロールは非推奨となっており、UI で割り当てることはできなくなりました。SCIM を使用してユーザーに viewer ロールを割り当てる場合:
- そのユーザーには、組織内で
member ロールが割り当てられます。
full シートではなく、Models の viewer シートが割り当てられます。これにより、Models には閲覧専用で、Registry にはフルアクセスできます。利用可能な Models シートがない場合は、Seat limit reached エラーがログされ、そのメンバーは Models へのアクセスなしで追加されます。シートが利用可能になれば、後で更新できます。
full シートではなく、Weave の 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
| パラメーター | タイプ | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | replace |
path | string | はい | teamRoles |
value | array | はい | teamName と roleName を含むオブジェクトの配列 |
Teamロール割り当てリクエスト
Teamロール割り当てレスポンス
{
"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"
}
割り当てられた Registry レベルのロールを付与して、ユーザーを Registry に追加します。
この操作はユーザーにのみ対応しており、サービスアカウントでは使用できません。サービスアカウントではカスタムロールはサポートされません。
エンドポイント
- 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"
}
ユーザーを Registry から削除します。
- 削除操作は RFC 7644 SCIM プロトコル仕様に従います。特定の Registry からユーザーを削除するには、フィルター構文
"registryRoles[registryName eq \"{registry_name}\"]" を使用します。すべての Registry からユーザーを削除するには、"registryRoles" を使用します。
- この操作はユーザーに対してのみ有効で、サービスアカウントには対応していません。サービスアカウントを Registry から削除するには、W&B Team の Settings で行ってください。
エンドポイント
- URL:
<host-url>/scim/Users/{id}
- method: PATCH
| パラメーター | タイプ | 必須 | 説明 |
|---|
id | string | はい | ユーザーの一意の ID |
op | string | はい | remove |
path | string | はい | "registryRoles[registryName eq \"{registry_name}\"]" または "registryRoles" |
Registry から削除するリクエスト
Registry から削除するレスポンス
{
"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 グループ操作はそのチームに対して行われます。チームの作成時にカスタムストレージを設定するには、リクエストに storageBucket を含めます。
SCIM を使用して W&B Team が作成されると、サービスアカウントのチームリソースへのアクセスを維持するため、組織レベルのすべてのサービスアカウントが自動的にそのチームに追加されます。
/Groups エンドポイントでは、特定のチームを検索するためのフィルタリングをサポートしています:
displayName eq "value" - チームの表示名でフィルター
GET /scim/Groups?filter=displayName eq "engineering-team"
チームの一意の ID を指定して、チームの情報を取得します。
エンドポイント
- URL:
<host-url>/scim/Groups/{id}
- method: 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"
]
}
チームの一覧を取得します。
エンドポイント
- URL:
<host-url>/scim/Groups
- method: 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
}
- エンドポイント:
<host-url>/scim/Groups
- method: POST
- 説明: 新しい チーム リソースを作成します。
- サポートされるフィールド:
| フィールド | タイプ | 必須 |
|---|
displayName | String | はい |
members | 複数値配列 | はい (value サブフィールドが必須で、ユーザー ID にマッピングされます) |
storageBucket | Object | いいえ |
チーム の作成時に storageBucket オブジェクトを含めることで、チーム レベルの Bring your own bucket (BYOB) を設定できます。省略した場合、チーム はデフォルトまたはインスタンスレベルのストレージを使用します。BYOB ガイドを参照して、バケット (ポリシー、CORS、認証情報) をプロビジョニングし、プロバイダーごとのストレージアドレス形式を確認してください。storageBucket オブジェクトには、次のサブフィールドがあります。
- 必須:
name (バケット名) 、provider (COREWEAVE、AWS、AZURE、GCP、MINIO のいずれか) 。値では大文字と小文字が区別されるため、表示されているとおりに大文字を使用してください。
- 任意:
path (バケット内のパス接頭辞) 、kmsKeyId (暗号化用の KMS キー。AWS などで使用) 、awsExternalId (AWS のクロスアカウントアクセス) 、azureTenantId (Azure テナント ID) 、azureClientId (Azure マネージドアイデンティティのクライアント ID) 。
W&B は、チーム を作成する前に、そのバケットが存在し到達可能であることを検証します。検証に失敗した場合、SCIM リクエストは失敗し、チーム は作成されません。
provider の値が無効な場合は、許可される値を示す SCIM エラーとともに 400 Bad Request が返されます。
以下の例では、カスタム ストレージを使用しないチーム、および特定のプロバイダーで BYOB ストレージを使用するチームの作成方法を示します。リクエスト例を確認するには目的のストレージ設定のタブを選択し、レスポンス例を確認するには レスポンス タブを選択してください。
リクエスト(BYOB なし)
CoreWeave
AWS S3
Azure
GCP
レスポンス
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "wandb-support",
"members": [
{
"value": "def"
}
]
}
POST /scim/Groups
Content-Type: application/scim+json
{
"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"
}
}
POST /scim/Groups
Content-Type: application/scim+json
{
"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"
}
}
POST /scim/Groups
Content-Type: application/scim+json
{
"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"
}
}
POST /scim/Groups
Content-Type: application/scim+json
{
"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"
}
}
{
"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"
]
}
- エンドポイント:
<host-url>/scim/Groups/{id}
- method: PATCH
- Description: 既存のチームのメンバー一覧を更新します。
- サポートされる操作:
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 の Settings で管理してください。
- エンドポイント:
<host-url>/scim/Groups/{id}
- method: PUT
- 説明: チームメンバーのリスト全体を置き換えます。
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 の Settings で管理してください。
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 の Settings で管理してください。
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 Team の Settings で管理してください。
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"
]
}
- チームには追加のデータが関連付けられているため、現在、SCIM API ではチームを削除できません。すべての関連データを含めて削除してよいことを確認するには、アプリからチームを削除してください。
SCIM のロールリソースは、W&B のカスタムロールに対応しています。前述のとおり、/Roles エンドポイントは公式の SCIM スキーマの一部ではありませんが、W&B では組織内のカスタムロールを自動管理できるようにするため、/Roles エンドポイントを追加しています。
ロールの一意の ID を指定して、カスタムロールの情報を取得します。
- URL:
<host-url>/scim/Roles/{id}
- Method: GET
{
"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": [
""
]
}
W&B 組織内のすべてのカスタムロールの情報を取得します。
- URL:
<host-url>/scim/Roles
- Method: GET
{
"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
}
- エンドポイント:
<host-url>/scim/Roles
- メソッド: POST
- 説明: W&B 組織に新しいカスタムロールを作成します。
- サポートされるフィールド:
| フィールド | タイプ | 必須 |
|---|
name | String | カスタムロール名 |
description | String | カスタムロールの説明 |
permissions | Object array | 権限オブジェクトの配列です。各オブジェクトには、値が w&bobject:operation 形式の name 文字列フィールドが含まれます。たとえば、W&B の run に対する delete 操作の権限オブジェクトでは、name は run:delete になります。 |
inheritedFrom | String | カスタムロールが継承元とする事前定義ロールです。member または viewer のいずれかを指定できます。 |
{
"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"
}
]
}
]
}
- エンドポイント:
<host-url>/scim/Roles/{id}
- method: PATCH
- 説明: 既存のカスタムロールから権限を削除します。
PATCH /scim/Roles/{role_id}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "remove",
"path": "permissions",
"value": [
{
"name": "project:update"
}
]
}
]
}
指定した権限を削除した、更新後のロールを返します。
- エンドポイント:
<host-url>/scim/Roles/{id}
- Method: PUT
- 説明: カスタムロール定義全体を置き換えます。
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 は、同時変更による競合を防ぐため、条件付き更新で ETags をサポートしています。ETags は、レスポンスヘッダー ETag と meta.version フィールドで返されます。
ETagを使用するには:
- 現在のETagを取得: リソースをGETした際に、レスポンスのETagヘッダーを確認します
- 条件付き更新: 更新時に、
If-MatchヘッダーにETagを含めます
# ユーザーを取得して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 | No Content (削除成功) |
400 | Bad Request - 無効なパラメーターまたはリクエストボディ |
401 | Unauthorized - 認証に失敗 |
403 | Forbidden - 権限不足 |
404 | Not Found - リソースが存在しません |
409 | Conflict - リソースはすでに存在します |
412 | Precondition Failed - ETag の不一致 |
500 | Internal Server Error |
W&B では 2 種類の SCIM API 実装を提供しており、利用できる機能はそれぞれ異なります。
| 機能 | 専用クラウド | セルフマネージド |
|---|
| ユーザーのメールアドレスを更新 | - | ✓ |
| ユーザーの表示名を更新 | - | ✓ |
| ユーザーの無効化 | ✓ | ✓ |
| ユーザーの再有効化 | - | ✓ |
| ユーザーごとに複数のメールアドレス | ✓ | - |
- 最大結果数: 1リクエストあたり9999件。
- Single-tenant 環境: 1ユーザーにつきメールアドレスは1つのみサポートされます。
- チーム の削除: SCIM 経由ではサポートされません (W&B の Web インターフェイスを使用してください) 。
- ユーザー の再有効化: Multi-tenant Cloud 環境ではサポートされません。
- シート数の制限: 組織のシート数制限に達すると、処理が失敗する場合があります。