API reference
SCIM v2
One tag: method, path, summary, auth, and scopes. Request and response fields ship in this page — expand a row to read the contract.
Endpoints
13
GET
/scim/v2/ServiceProviderConfig
SCIM Token
Get SCIM service provider configuration
/scim/v2/ServiceProviderConfig
SCIM Token
Get SCIM service provider configuration
Description
Returns the SCIM 2.0 service provider configuration. Authenticate with `Authorization: Bearer` using a workspace SCIM token minted or revoked on Workspace admin (`/app/admin`) — not `/app/workspace`. This response advertises `filter.maxResults` 200. List endpoints do not honor that figure: `count` defaults to 50 and is capped at 100. `filter` is supported only on Users, and only for three `eq` expressions (see GET /scim/v2/Users). Groups ignore `filter`. Bulk, sort, ETag, and changePassword are not supported.
Auth
SCIM TokenResponses
200
Service provider configuration (advertised capabilities)
Returns: ServiceProviderConfig
Service provider configuration (advertised capabilities)
Returns: ServiceProviderConfig
Example
{
"authenticationSchemes": [
{
"description": "Workspace SCIM bearer token",
"name": "Bearer Token",
"primary": true,
"type": "oauthbearertoken"
}
],
"bulk": {
"maxOperations": 0,
"maxPayloadSize": 0,
"supported": false
},
"changePassword": {
"supported": false
},
"etag": {
"supported": false
},
"filter": {
"maxResults": 200,
"supported": true
},
"patch": {
"supported": true
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"
],
"sort": {
"supported": false
}
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
GET
/scim/v2/Users
SCIM Token
List SCIM users
/scim/v2/Users
SCIM Token
List SCIM users
Description
Lists SCIM-linked workspace members as a SCIM ListResponse. Pagination: `startIndex` is 1-based (default 1). `count` defaults to 50 and is capped at 100 (a requested 500 still returns at most 100). Filter is not generic SCIM. Only these exact `eq` forms are applied: `userName eq "…"`, `emails.value eq "…"`, and `externalId eq "…"`. Any other expression is ignored and the unfiltered page is returned.
Auth
SCIM TokenParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| startIndex | query | integer | No | 1-based index of the first result (default 1) |
| count | query | integer | No | Page size (default 50, maximum 100) |
| filter | query | string | No | Only `userName eq`, `emails.value eq`, and `externalId eq` are honored. Other filters are ignored. |
Responses
200
Paginated user list
Returns: ScimUserList
Paginated user list
Returns: ScimUserList
Example
{
"Resources": [
{
"active": true,
"emails": [
{
"primary": true,
"value": "[email protected]"
}
],
"externalId": "ext-user-001",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"meta": {
"created": "2026-01-15T10:00:00Z",
"lastModified": "2026-03-27T09:00:00Z",
"resourceType": "User"
},
"name": {
"formatted": "Jane Admin"
},
"roles": [
{
"value": "admin"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "[email protected]"
}
],
"itemsPerPage": 1,
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"startIndex": 1,
"totalResults": 1
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
POST
/scim/v2/Users
SCIM Token
Create or update SCIM user
/scim/v2/Users
SCIM Token
Create or update SCIM user
Description
Upserts a user by `externalId` (idempotent) or email. `userName` is the email. `roles` is a list of `{value}` (or bare strings) in `owner` | `admin` | `member` | `auditor`; omitted roles default to `member`. Responses include the effective `roles` after group reconciliation. `409` `application/scim+json` is returned for uniqueness conflicts (`Resource already exists`) and last-owner protection (`Cannot modify the last workspace owner`).
Auth
SCIM TokenRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
| active | boolean | No | Whether the membership is active (false deprovisions) |
| name | object | No | User name object. `formatted` is the display name. |
| emails | array<object> | No | User email addresses |
| schemas | array<object> | Yes | SCIM schema URIs |
| externalId | string | No | IdP external id. Used as the upsert idempotency key. |
| roles | array<object> | No | Workspace roles. Each item is `{value}` or a string: owner, admin, member, or auditor. Default member. |
| userName | string | Yes | User email address |
Responses
200
User created or updated
Returns: ScimUser
User created or updated
Returns: ScimUser
Example
{
"active": true,
"emails": [
{
"primary": true,
"value": "[email protected]"
}
],
"externalId": "ext-user-001",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"meta": {
"created": "2026-01-15T10:00:00Z",
"lastModified": "2026-03-27T09:00:00Z",
"resourceType": "User"
},
"name": {
"formatted": "Jane Admin"
},
"roles": [
{
"value": "admin"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "[email protected]"
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
409
SCIM Error: uniqueness conflict or last-owner protection (application/scim+json)
SCIM Error: uniqueness conflict or last-owner protection (application/scim+json)
422
Invalid userName/email or user data
Invalid userName/email or user data
GET
/scim/v2/Users/:id
SCIM Token
Get SCIM user
/scim/v2/Users/:id
SCIM Token
Get SCIM user
Description
Returns a provisioned user by user UUID. Non-UUID ids are 404.
Auth
SCIM TokenParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | User UUID |
Responses
200
User details
Returns: ScimUser
User details
Returns: ScimUser
Example
{
"active": true,
"emails": [
{
"primary": true,
"value": "[email protected]"
}
],
"externalId": "ext-user-001",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"meta": {
"created": "2026-01-15T10:00:00Z",
"lastModified": "2026-03-27T09:00:00Z",
"resourceType": "User"
},
"name": {
"formatted": "Jane Admin"
},
"roles": [
{
"value": "admin"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "[email protected]"
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
404
User not found
User not found
PUT
/scim/v2/Users/:id
SCIM Token
Update SCIM user
/scim/v2/Users/:id
SCIM Token
Update SCIM user
Description
Full replacement of a provisioned user. Accepts the same attributes as create, including `roles` (`owner` | `admin` | `member` | `auditor`) and `emails`. Last-owner demotion/deactivation and uniqueness conflicts are `409` application/scim+json.
Auth
SCIM TokenRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
| active | boolean | No | Whether the membership is active |
| name | object | No | User name object (`formatted`) |
| emails | array<object> | No | User email addresses |
| schemas | array<object> | Yes | SCIM schema URIs |
| externalId | string | No | IdP external id |
| roles | array<object> | No | Workspace roles (`owner` | `admin` | `member` | `auditor`). Default keeps the existing role when omitted on update. |
| userName | string | Yes | User email address |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | User UUID |
Responses
200
User updated
Returns: ScimUser
User updated
Returns: ScimUser
Example
{
"active": true,
"emails": [
{
"primary": true,
"value": "[email protected]"
}
],
"externalId": "ext-user-001",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"meta": {
"created": "2026-01-15T10:00:00Z",
"lastModified": "2026-03-27T09:00:00Z",
"resourceType": "User"
},
"name": {
"formatted": "Jane Admin"
},
"roles": [
{
"value": "admin"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "[email protected]"
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
404
User not found
User not found
409
SCIM Error: uniqueness conflict or last-owner protection (application/scim+json)
SCIM Error: uniqueness conflict or last-owner protection (application/scim+json)
422
Invalid user data
Invalid user data
PATCH
/scim/v2/Users/:id
SCIM Token
Patch SCIM user
/scim/v2/Users/:id
SCIM Token
Patch SCIM user
Description
SCIM PATCH. Honored `replace` paths: `active`, `name.formatted`, `userName`, and `roles`. A pathless `replace` may also set `active`, `userName`, `name`, `roles`, `emails`, and `externalId`. Other operations are ignored. Last-owner and uniqueness conflicts are `409` application/scim+json.
Auth
SCIM TokenRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
| schemas | array<object> | Yes | SCIM schema URIs |
| Operations | array<object> | No | PATCH operations. replace on active | name.formatted | userName | roles, or a pathless replace map. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | User UUID |
Responses
200
User patched
Returns: ScimUser
User patched
Returns: ScimUser
Example
{
"active": true,
"emails": [
{
"primary": true,
"value": "[email protected]"
}
],
"externalId": "ext-user-001",
"id": "0f1cdac9-305d-4d11-a53d-3fca310c0635",
"meta": {
"created": "2026-01-15T10:00:00Z",
"lastModified": "2026-03-27T09:00:00Z",
"resourceType": "User"
},
"name": {
"formatted": "Jane Admin"
},
"roles": [
{
"value": "admin"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "[email protected]"
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
404
User not found
User not found
409
SCIM Error: uniqueness conflict or last-owner protection (application/scim+json)
SCIM Error: uniqueness conflict or last-owner protection (application/scim+json)
422
Invalid user data
Invalid user data
DELETE
/scim/v2/Users/:id
SCIM Token
Deactivate SCIM user
/scim/v2/Users/:id
SCIM Token
Deactivate SCIM user
Description
Soft-deletes the membership (`status` disabled). Deactivating the last workspace owner is `409` `Cannot modify the last workspace owner` (`application/scim+json`). Already-disabled users succeed as 204.
Auth
SCIM TokenParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | User UUID |
Responses
204
User deactivated
User deactivated
401
Invalid or missing SCIM token
Invalid or missing SCIM token
404
User not found
User not found
409
Cannot modify the last workspace owner (application/scim+json)
Cannot modify the last workspace owner (application/scim+json)
GET
/scim/v2/Groups
SCIM Token
List SCIM groups
/scim/v2/Groups
SCIM Token
List SCIM groups
Description
Lists provisioned groups stored on the workspace. Same pagination as Users: `startIndex` default 1, `count` default 50, maximum 100. There is no `filter` parameter — a supplied `filter` is ignored.
Auth
SCIM TokenParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| startIndex | query | integer | No | 1-based index of the first result (default 1) |
| count | query | integer | No | Page size (default 50, maximum 100) |
Responses
200
Paginated group list
Returns: ScimGroupList
Paginated group list
Returns: ScimGroupList
Example
{
"Resources": [
{
"displayName": "Engineering",
"externalId": "ext-group-eng",
"id": "b1c2d3e4-f5a6-7890-bcde-f12345678901",
"members": [
{
"value": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
}
],
"meta": {
"resourceType": "Group"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
],
"itemsPerPage": 1,
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"startIndex": 1,
"totalResults": 1
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
POST
/scim/v2/Groups
SCIM Token
Create or update SCIM group
/scim/v2/Groups
SCIM Token
Create or update SCIM group
Description
Upserts a group by `externalId`. `members` is a list of user UUIDs (`{value}`). After write, membership roles are reconciled from each group's `displayName` tokens: - `admin` / `admins` / `administrator` / `administrators` → `admin` - `auditor` / `auditors` → `auditor` - names starting with `non-` / `not-` stay `member` - `owner` is never granted from a group name (`Workspace Owners` stays member) A user's effective role is the highest of their explicit SCIM `roles` and every matching group (owner > admin > auditor > member). The last workspace owner is never demoted by group sync. Uniqueness conflicts are `409` `Resource already exists`.
Auth
SCIM TokenRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
| members | array<object> | No | Member user UUIDs (`{value}` or equivalent) |
| schemas | array<object> | Yes | SCIM schema URIs |
| displayName | string | Yes | Group display name. Tokens grant admin or auditor as described above; owner is never granted from the name. |
| externalId | string | No | External group ID (upsert key) |
Responses
200
Group created or updated
Returns: ScimGroup
Group created or updated
Returns: ScimGroup
Example
{
"displayName": "Engineering",
"externalId": "ext-group-eng",
"id": "b1c2d3e4-f5a6-7890-bcde-f12345678901",
"members": [
{
"value": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
}
],
"meta": {
"resourceType": "Group"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
409
SCIM Error: Resource already exists (application/scim+json)
SCIM Error: Resource already exists (application/scim+json)
422
Invalid group data
Invalid group data
GET
/scim/v2/Groups/:id
SCIM Token
Get SCIM group
/scim/v2/Groups/:id
SCIM Token
Get SCIM group
Description
Returns a provisioned group by id or externalId.
Auth
SCIM TokenParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Group UUID or externalId |
Responses
200
Group details
Returns: ScimGroup
Group details
Returns: ScimGroup
Example
{
"displayName": "Engineering",
"externalId": "ext-group-eng",
"id": "b1c2d3e4-f5a6-7890-bcde-f12345678901",
"members": [
{
"value": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
}
],
"meta": {
"resourceType": "Group"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
404
Group not found
Group not found
PUT
/scim/v2/Groups/:id
SCIM Token
Update SCIM group
/scim/v2/Groups/:id
SCIM Token
Update SCIM group
Description
Replaces `displayName` and `members`, then reconciles workspace roles from displayName tokens (admin/auditor only; owner is never granted from a group name). Uniqueness conflicts are `409`.
Auth
SCIM TokenRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
| members | array<object> | No | Member user UUIDs |
| schemas | array<object> | Yes | SCIM schema URIs |
| displayName | string | Yes | Group display name. Tokens grant admin or auditor; owner is never granted from the name. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Group UUID |
Responses
200
Group updated
Returns: ScimGroup
Group updated
Returns: ScimGroup
Example
{
"displayName": "Engineering",
"externalId": "ext-group-eng",
"id": "b1c2d3e4-f5a6-7890-bcde-f12345678901",
"members": [
{
"value": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
}
],
"meta": {
"resourceType": "Group"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
404
Group not found
Group not found
409
SCIM Error: Resource already exists (application/scim+json)
SCIM Error: Resource already exists (application/scim+json)
PATCH
/scim/v2/Groups/:id
SCIM Token
Patch SCIM group
/scim/v2/Groups/:id
SCIM Token
Patch SCIM group
Description
Honored `replace` paths: `displayName` and `members`. Other operations are ignored. Role reconciliation from the new displayName is the same as create/update. Uniqueness conflicts are `409`.
Auth
SCIM TokenRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
| schemas | array<object> | Yes | SCIM schema URIs |
| Operations | array<object> | No | PATCH operations. replace on displayName or members. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Group UUID |
Responses
200
Group patched
Returns: ScimGroup
Group patched
Returns: ScimGroup
Example
{
"displayName": "Engineering",
"externalId": "ext-group-eng",
"id": "b1c2d3e4-f5a6-7890-bcde-f12345678901",
"members": [
{
"value": "0f1cdac9-305d-4d11-a53d-3fca310c0635"
}
],
"meta": {
"resourceType": "Group"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group"
]
}
401
Invalid or missing SCIM token
Invalid or missing SCIM token
404
Group not found
Group not found
409
SCIM Error: Resource already exists (application/scim+json)
SCIM Error: Resource already exists (application/scim+json)
DELETE
/scim/v2/Groups/:id
SCIM Token
Delete SCIM group
/scim/v2/Groups/:id
SCIM Token
Delete SCIM group
Description
Deletes a provisioned group and re-runs role reconciliation for remaining groups.
Auth
SCIM TokenParameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes | Group UUID |
Responses
204
Group deleted
Group deleted
401
Invalid or missing SCIM token
Invalid or missing SCIM token
404
Group not found
Group not found