SCIM Provisioning

Automatically sync users and groups from Entra ID, Google Workspace, or Okta using SCIM 2.0.

What it is

qlture implements a SCIM 2.0 server: we are the Service Provider, and your identity provider (IdP) is the client. This means creating, updating, and deactivating users (and groups) in qlture happens automatically, driven by your directory. No more inviting people one by one and forgetting to remove those who leave.

Compatible with Microsoft Entra ID, Google Workspace, and Okta.

flowchart LR
  I["Your IdP<br/>Entra · Google · Okta"] -->|SCIM 2.0| Q{Action}
  Q -->|Create / update| U[User in qlture]
  Q -->|active = false| D[Deactivate + end sessions]
  Q -->|Groups| G[Synced groups]
  classDef hl fill:#c6ff00,stroke:#c6ff00,color:#070a0e;
  class U hl
SCIM Provisioning screen in the qlture dashboard
Settings → Provisioning: the Base URL, the token generation button, and the role for provisioned users.

SCIM endpoints

The IdP talks to the Base URL shown in the dashboard under the Tenant URL (SCIM) field; copy it with the Copy button. Beneath it sit the protocol’s standard resources: /Users, /Groups, /ServiceProviderConfig, /ResourceTypes, and /Schemas.

Configure (step by step)

In the dashboard, under Settings → Provisioning (TENANT_ADMIN access):

  1. Click Generate token. qlture creates a bearer token in the format scim_<...>.
  2. Copy the token now, because it is shown only once. We store only a hash (SHA-256); it cannot be recovered later.
  3. In your IdP, register the provisioning application with:
    • Tenant URL / Base URL: the URL shown in the dashboard (Copy button).
    • Secret Token: the scim_... token you copied.
  4. Set the default role for provisioned users (the default is COLLABORATOR).
  5. Enable provisioning at the IdP and run a test sync.

The token is shown only at generation. If you lose it, rotate — generate a new one and update the IdP. Rotating invalidates the previous token immediately.

Authentication

Each tenant has its own bearer token. We store only its SHA-256 hash; the plaintext token appears once, at generation. On each request from the IdP, we resolve the tenant by the hash and update the last-sync timestamp — which you can see in the dashboard.

What gets synced

The mapping between SCIM attributes and the qlture model:

SCIM attribute Field in qlture
userName / emails email (key)
name.givenName + familyName / formatted / displayName name
active status (false → deactivates and ends sessions)
enterprise extension → department department
title position
externalId external user reference
Groups qlture group collection

Key points:

  • Provisioned users come in as COLLABORATOR by default (configurable), with no password, so they authenticate via OTP in the agent or via SSO.
  • Setting active: false at the IdP deactivates the user in qlture and kills active sessions at that same moment (soft delete — history is preserved).
  • Provisioning respects your plan’s user limit.
  • Groups from the IdP become groups in qlture, ready to segment campaigns.

The PATCH operation covers both ways IdPs send active (with and without path) and is case-insensitive, so Entra, Google, and Okta all work with no tweaks.

Auditing

Every provisioning operation is recorded in the tenant’s audit log: scim.user.provision, scim.user.update, scim.user.deprovision, and scim.token.rotate. You get full traceability of who was created, changed, or offboarded — and when.

Troubleshooting

The IdP gets an “empty request” error or a 400 when creating users. IdPs send Content-Type: application/scim+json. qlture already handles this correctly — if you’re running your own environment, make sure that content type is accepted before the JSON parser.

The sync “works” but no one shows up. Check the default role and the plan’s user limit. Users beyond the limit are not created.

I need to change the token. Use Rotate in the dashboard. The old token stops working immediately; update the secret in the IdP.

  • SSO — manager authentication. Combine SSO (login) + SCIM (lifecycle).
  • Getting started — roles and provisioning.

SSO (single sign-on)
Self-enrollment