Overview
The SCIM (System for Cross-domain Identity Management) 2.0 API provides standardized endpoints for automated user and group provisioning. SCIM enables identity providers and HR systems to synchronize user accounts, manage lifecycle events, and maintain group memberships automatically.Use Cases
- Identity Provider (IdP) Provisioning: Okta, Azure AD, OneLogin
- HR System Integration: Workday, BambooHR, SAP SuccessFactors
- User Lifecycle Automation: Onboarding, offboarding, role changes
- Group Management: Automatic team/department synchronization
- Directory Synchronization: Keep user data in sync across systems
SCIM 2.0 Standards Compliance
- Supported Features
- Backend Integration
-
✅ Core User Schema (RFC 7643 §4.1)
- userName, name, emails, active, password
-
✅ Core Group Schema (RFC 7643 §4.2)
- displayName, members
-
✅ CRUD Operations (RFC 7644)
- Create (POST), Read (GET), Update (PUT/PATCH), Delete
-
✅ Filtering & Pagination
- Basic filters (userName eq, email eq)
- Pagination (startIndex, count)
-
✅ PATCH Operations (RFC 7644 §3.5.2)
- replace, add (partial support)
Base URL
Authentication
All SCIM endpoints require authentication:Authorization: Bearer {token}(service account or admin user)- Requires SCIM provisioning permissions
User Endpoints
POST /Users
Create a new user (SCIM 2.0). Provisions user in Keycloak and syncs roles to OpenFGA. Request Body:array
required
SCIM schema URIs (always
["urn:ietf:params:scim:schemas:core:2.0:User"])string
required
Unique username or email address
object
User’s name:
givenName: First namefamilyName: Last nameformatted: Full name
array
Email addresses (array of
{value, primary} objects)boolean
default:true
Whether user account is active
string
User’s initial password (optional, can be set later)
Created
User created successfully
Bad Request
Invalid SCIM schema or missing required fields
Conflict
User already exists
GET /Users/
Get user by ID (SCIM 2.0). Returns user in SCIM format. Path Parameters:string
required
Keycloak user ID (UUID)
Success
User retrieved successfully
Not Found
User not found
PUT /Users/
Replace user (SCIM 2.0 PUT). Replaces entire user resource. All fields must be provided. Path Parameters:string
required
Keycloak user ID (UUID)
Success
User updated successfully
Bad Request
Invalid SCIM schema
Not Found
User not found
PATCH /Users/
Update user with PATCH operations (SCIM 2.0). Supports partial updates using SCIM PATCH operations. Path Parameters:string
required
Keycloak user ID (UUID)
array
required
["urn:ietf:params:scim:api:messages:2.0:PatchOp"]array
required
Array of PATCH operations:
op: Operation type (replace,add,remove)path: Attribute path (e.g.,active,emails)value: New value
Success
User patched successfully
Bad Request
Invalid PATCH operation
Not Found
User not found
DELETE /Users/
Delete (deactivate) user (SCIM 2.0). Deactivates user in Keycloak (setsenabled=false) and removes OpenFGA authorization tuples. User data is preserved for compliance.
Path Parameters:
string
required
Keycloak user ID (UUID)
Soft Delete: Users are deactivated (not permanently deleted) to comply with audit and compliance requirements. Hard deletion requires direct Keycloak admin access.
No Content
User deleted successfully
Not Found
User not found
GET /Users
List/search users (SCIM 2.0). Supports basic filtering and pagination. Query Parameters:string
SCIM filter expression (e.g.,
userName eq "alice@example.com")Supported filters:userName eq "value"email eq "value"
integer
default:1
1-based start index for pagination (minimum: 1)
integer
default:100
Number of results to return (1-1000)
Success
Users retrieved successfully
Bad Request
Invalid filter or pagination parameters
Group Endpoints
POST /Groups
Create a new group (SCIM 2.0). Request Body:array
required
["urn:ietf:params:scim:schemas:core:2.0:Group"]string
required
Group name (e.g., “Engineering”, “Marketing”)
array
Array of group members:
value: User ID (UUID)display: Display name (optional)
Created
Group created successfully
Bad Request
Invalid SCIM schema
Conflict
Group already exists
GET /Groups/
Get group by ID (SCIM 2.0). Path Parameters:string
required
Keycloak group ID (UUID)
Success
Group retrieved successfully
Not Found
Group not found
Identity Provider Integration Examples
Okta SCIM Integration
Azure AD SCIM Integration
OneLogin SCIM Integration
SCIM Testing & Validation
Test User Provisioning Flow
Related Documentation
SCIM Provisioning Guide
Complete SCIM setup and integration guide
Keycloak Integration
Keycloak deployment and configuration
OpenFGA Authorization
Authorization model and permissions
SCIM Implementation ADR
SCIM design decisions
Standards Compliant: Full SCIM 2.0 protocol implementation with Keycloak and OpenFGA integration!