Skip to content

SCIM 2.0 reference

Claresia exposes a SCIM 2.0 endpoint per tenant. Your IdP (Okta, Azure AD, Google Workspace, OneLogin, JumpCloud, Keycloak) pushes user create / update / delete events. Claresia provisions, updates, and de-provisions in real time.

Per-tenant URL pattern:

https://api.workos.com/scim/v2/<directory_id>

The exact URL + bearer token are displayed in Step 5 of the Onboarding Portal.

ResourceOperationsNotes
UsersGET / POST / PATCH / PUT / DELETEDELETE = active: false (de-provision). Hard-delete on tenant offboarding only.
GroupsGET / POST / PATCH / PUT / DELETEGroup membership drives RBAC role assignment
SchemasGETRFC 7644 standard
ServiceProviderConfigGETCapabilities advertisement
ResourceTypesGETStandard
SCIM attributeClaresia fieldRequired
userNameemail (also primary lookup)yes
name.givenNamefirst_nameyes
name.familyNamelast_nameyes
emails[type=work].valueemail (canonical)yes
activeis_active (false = de-provisioned)yes
titlejob_title (drives archetype mapping via cc-061)recommended
departmentdepartmentoptional
phoneNumbers[type=work].valuephoneoptional
addresses[type=work]office_locationoptional
preferredLanguagelocale (e.g., en-US, it-IT)optional
timezonetimezone (IANA, e.g., Europe/Rome)optional
AttributeUse
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumberCross-system employee lookup
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager.valueManager hierarchy (drives manager dashboards)
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:costCenterCost-center reporting
SCIM attributeClaresia field
displayNamegroup_name
members[]group_member_user_ids[]

Groups starting with the prefix claresia- are recognized as RBAC role groups (see Identity overview).

When your IdP sends PATCH /Users/{id} with active: false:

  1. Claresia marks the user is_active = false in our DB
  2. We revoke the user’s JWT immediately — subsequent API calls return 401
  3. We remove them from every per-archetype skill entitlement set
  4. We trigger a publish refresh to the LLM platform Distribution Plane — within 60s, the user cannot invoke any Claresia skill from Claude / Copilot / ChatGPT / Slack
  5. We write a governance_event Hub record user_deactivated (actor: <idp_name>:scim)

End-to-end de-provision SLO: <60 seconds from your IdP’s webhook to the user losing skill access.

We support standard SCIM 2.0 pagination + filtering:

  • ?startIndex=1&count=100
  • ?filter=userName eq "alice@dainese.it"
  • ?filter=active eq true
  • ?filter=title sw "Sr " (starts-with on title — useful to test archetype mapping)
  • 100 requests / second per tenant (sustained)
  • 1000 requests / second per tenant (burst, 10s window)

If your IdP triggers a full-org sync, requests stay within these limits — for

50k users, contact your CSM to coordinate the initial sync.

For IdPs that don’t poll, Claresia can register a webhook on user-lifecycle events to your endpoint. Events:

  • user.created
  • user.updated
  • user.deactivated
  • user.skill_entitlement_changed
  • user.archetype_assigned

Webhook payloads are signed with HMAC-SHA256 (header X-Claresia-Signature). Idempotent retry on 5xx with exponential backoff up to 24h.

Use the Sync now button in Onboarding Portal Step 5 — it triggers an immediate full-pull from your IdP and shows you:

  • Users created
  • Users updated
  • Users de-provisioned
  • Groups created / updated
  • Errors (with HTTP status + body)

If you see errors, paste the error code into Slack/Teams Connect — your CSM has a runbook for every SCIM error.

  • SCIM bearer tokens are per-tenant, immutable, rotatable
  • Tokens are stored hashed in our DB (we cannot retrieve a token after generation; rotation generates a new one)
  • All SCIM traffic is TLS 1.3 minimum
  • IP allowlisting available in Mode B/C — restrict the SCIM endpoint to your IdP’s egress IP ranges