Base URL and authentication
SCIM tokens are per company, long-lived, prefixed with
scim_, stored hashed and returned once at creation. Two tokens can be active at the same time so the credential can be rotated without downtime. The company is resolved from the token, so an identity provider can never address another tenant.
A request is rejected with 401 when the token is missing, unknown or revoked, and when SCIM is disabled on the company. User access tokens and the internal service headers are not accepted on these routes.
SCIM responses are not wrapped in the JSend envelope used by the rest of the API, and these routes are absent from the OpenAPI specification: SCIM mandates its own body shapes and tolerates unknown attributes sent by connectors.
Resources and operations
Any other path — including
/Bulk and /Me — returns 404 with a SCIM error body. Service accounts are invisible to SCIM: they are never listed, updated or deactivated.
User attribute mapping
Users created through SCIM get a random, unusable password and authenticate through SSO. They never receive an invitation email, and a pending invitation for the same address is marked as used.
Lifecycle semantics
The deprovisioning mode is a Reelevant-side setting (
soft by default), not something the request can choose.
Roles and groups
/Groups maps one-to-one to Teams (Resource Groups). Groups created through SCIM are flat: hierarchy remains an administrator decision made through the REST API, and SCIM never rewires it. DELETE /Groups/{id} on a Team that has parents or children returns 400 mutability.
A user always keeps at least one Team: removing the last one falls back to the company default Teams. When group synchronisation is disabled on the company, every /Groups route returns 501.
A user has exactly one role, so the role cannot be a group membership. The source is a per-company setting:
An unresolvable value never fails the request: the configured default role is applied and an audit entry records the miss. Under
groups, losing the mapped group demotes the user to the default role.
Pagination and filters
Filterable attributes are
userName and externalId on /Users, displayName and externalId on /Groups. Any other attribute, or any grammar beyond eq (and, or, co, sw), returns 400 invalidFilter rather than silently listing the whole tenant.
Lists use the SCIM ListResponse envelope:
PATCH operations
Operations and operations are both accepted, with or without the PatchOp schema. Paths are case-insensitive, value may be an object or an array, and booleans may arrive as strings — Entra ID and Okta send all of these variants.
/Groups, member operations accept both a list of members and the value filter form members[value eq "<userId>"]. Any other value filter returns 400 invalidPath.
Error envelope
Errors use the RFC 7644 §3.12Error object, served as application/scim+json:
Advertised capabilities and limits
GET /ServiceProviderConfig advertises exactly what is implemented, so connectors degrade gracefully instead of failing:
Known limits: one role per user, groups created by SCIM are flat, a user always keeps at least one Team, and email addresses are globally unique so a cross-company address returns
uniqueness.
Administration endpoints
Enabling SCIM and managing tokens is done through the regular REST API, authenticated with a user access token (see Authentication).read Company is required to read, update Company to write.
Every SCIM request and every configuration change is recorded in the audit trail, readable through
GET /v2/audit-logs by any caller with update rights on users, roles or Teams.
Related
- Authentication — obtaining the access token used by the administration endpoints
- API reference introduction — conventions of the rest of the API
- Automatic user provisioning — the administrator-facing setup guide
- Audit log — what is recorded and who can read it