SCIM 2.0 Endpoints

Provision and deprovision users and groups from an external directory such as Okta or Azure AD using the SCIM 2.0 protocol (RFC 7642–7644).


Authentication

All SCIM endpoints require a per-tenant SCIM bearer token.

Authorization: Bearer <scim-token>

Obtain your SCIM token from the Settings → Directory Sync page in the Bulwark dashboard, or via the Admin API. The base URL for all SCIM requests is:

https://api.bulwarkauth.com/scim/v2

Service Provider Configuration

GET /scim/v2/ServiceProviderConfig

Returns the SCIM capabilities supported by Bulwark. Used by IdPs during initial setup.

Response 200

{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"],
  "documentationUri": "https://docs.bulwarkauth.com/api/scim",
  "patch": { "supported": true },
  "bulk": { "supported": false },
  "filter": { "supported": true, "maxResults": 200 },
  "changePassword": { "supported": true },
  "sort": { "supported": false },
  "etag": { "supported": false },
  "authenticationSchemes": [
    {
      "type": "oauthbearertoken",
      "name": "OAuth Bearer Token",
      "description": "Per-tenant SCIM token issued by Bulwark"
    }
  ]
}

Schemas

GET /scim/v2/Schemas

Returns all supported SCIM schema definitions.

GET /scim/v2/Schemas/{id}

Returns a single schema by URN (e.g. urn:ietf:params:scim:schemas:core:2.0:User).


Resource Types

GET /scim/v2/ResourceTypes

Returns the User and Group resource type definitions.


Users

Create User

POST /scim/v2/Users

Body

{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "userName": "[email protected]",
  "name": {
    "givenName": "Jane",
    "familyName": "Doe"
  },
  "emails": [
    { "value": "[email protected]", "primary": true, "type": "work" }
  ],
  "active": true,
  "externalId": "okta-user-00u..."
}

Response 201

{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "id": "usr_01j...",
  "externalId": "okta-user-00u...",
  "userName": "[email protected]",
  "name": { "givenName": "Jane", "familyName": "Doe" },
  "emails": [{ "value": "[email protected]", "primary": true }],
  "active": true,
  "meta": {
    "resourceType": "User",
    "created": "2026-03-30T00:00:00Z",
    "lastModified": "2026-03-30T00:00:00Z",
    "location": "https://api.bulwarkauth.com/scim/v2/Users/usr_01j..."
  }
}

Get User

GET /scim/v2/Users/{id}

Returns a single user by Bulwark ID or externalId.


List Users

GET /scim/v2/Users

Query Parameters

| Parameter | Description | |-----------|-------------| | filter | SCIM filter expression (e.g. userName eq "[email protected]") | | startIndex | 1-based pagination offset (default: 1) | | count | Page size (default: 20, max: 200) |

Response 200

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 42,
  "startIndex": 1,
  "itemsPerPage": 20,
  "Resources": [
    {
      "id": "usr_01j...",
      "userName": "[email protected]",
      "active": true
    }
  ]
}

Replace User

PUT /scim/v2/Users/{id}

Full replacement of all user attributes. The body must contain the complete user representation.

Response 200

Returns the full updated user resource.


Update User

PATCH /scim/v2/Users/{id}

Partial update using SCIM patch operations.

Body

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [
    { "op": "replace", "path": "active", "value": false }
  ]
}

Setting active to false deactivates the user and revokes all active sessions.

Response 200

Returns the full updated user resource.


Delete User

DELETE /scim/v2/Users/{id}

Permanently deprovisions the user. All sessions and tokens are revoked.

Response 204

No content.


Groups

Create Group

POST /scim/v2/Groups

Body

{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
  "displayName": "Engineering",
  "externalId": "grp-eng-001",
  "members": [
    { "value": "usr_01j...", "display": "Jane Doe" }
  ]
}

Response 201

{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
  "id": "grp_01j...",
  "displayName": "Engineering",
  "externalId": "grp-eng-001",
  "members": [{ "value": "usr_01j...", "display": "Jane Doe" }],
  "meta": {
    "resourceType": "Group",
    "created": "2026-03-30T00:00:00Z",
    "location": "https://api.bulwarkauth.com/scim/v2/Groups/grp_01j..."
  }
}

Get Group

GET /scim/v2/Groups/{id}

List Groups

GET /scim/v2/Groups

Supports the same filter, startIndex, and count parameters as List Users.


Replace Group

PUT /scim/v2/Groups/{id}

Full replacement of the group including its member list.


Update Group

PATCH /scim/v2/Groups/{id}

Add or remove members using SCIM patch operations.

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [
    {
      "op": "add",
      "path": "members",
      "value": [{ "value": "usr_01j_new..." }]
    },
    {
      "op": "remove",
      "path": "members[value eq \"usr_01j_old...\"]"
    }
  ]
}

Delete Group

DELETE /scim/v2/Groups/{id}

Removes the group. Members are not deleted.

Response 204

No content.