Connect your identity provider to CloudThinker with SCIM 2.0 so people are added, suspended, and removed as your directory changes.
SCIM (System for Cross-domain Identity Management) lets your identity provider (IdP), such as Okta or Microsoft Entra ID, manage CloudThinker accounts for you. Assign someone to the CloudThinker app in your IdP and they join your organization; unassign them and their access ends, with no manual invites or removals.
They’re added to your organization with the Auto-assigned organization role and get the Auto-assigned workspaces
Change their name or email
Their CloudThinker profile updates
Deactivate them (set inactive)
Their membership is suspended and they lose access to every workspace
Reactivate them
Their membership comes back, with the auto-assigned workspaces
Delete them (SCIM DELETE)
They’re removed from the organization
Push a group
The group appears under Group mappings, where you pick workspaces for its members
Unassigning someone from the app usually counts as a deactivation, not a delete. Okta and Microsoft Entra ID both send active=false when you unassign a user, so the person is suspended in CloudThinker, not removed. They’re removed only when your IdP sends a DELETE.While SCIM is on, your IdP is the source of truth for who’s in the organization:
Member invitations are turned off. Inviting from CloudThinker returns “Member invitations are disabled because this organization uses SCIM provisioning.”
You can’t remove a SCIM-provisioned member in CloudThinker. The error reads “This member was provisioned via SCIM.” Remove them in your IdP instead.
Just-in-time provisioning is turned off. SCIM and just-in-time (accounts created on first SSO sign-in) can’t run together. Turning on SCIM switches just-in-time off for you. Someone on your domain whom your IdP hasn’t provisioned is refused at SSO sign-in with “No account found. Contact your administrator for access.” until your IdP provisions them.
You can still change a member’s role or workspace access in CloudThinker. See Organization.
Go to Admin Settings → Identity and access and find the Provisioning & directory sync card under your SSO connection.If the card is missing, your SSO connection isn’t active yet. Finish SSO setup first.
2
Choose SCIM
Select SCIM (Sync users and groups from your identity provider). The other options are Manual (you invite people yourself) and Just-in-time (accounts are created on first SSO sign-in).Success state: the SCIM enabled dialog opens.
3
Copy the two values
The dialog shows:
Bearer token: the secret your IdP sends to prove its requests are allowed.
SCIM base URL: the endpoint your IdP calls. It looks like https://<your-cloudthinker-host>/api/v1/scim/<organization-id>/v2.
Copy both, then click Done.Success state: the card shows Directory sync (SCIM) with “SCIM directory sync is active.”
The bearer token is shown only once. If you close the dialog without copying it, click Rotate token to get a new one.
Open the CloudThinker app. On the General tab, click Edit under App Settings, set Provisioning to SCIM, and save.
2
Enter the connection details
On Provisioning → Integration, click Edit:
Okta field
Value
SCIM connector base URL
The SCIM base URL from CloudThinker
Unique identifier field for users
userName
Supported provisioning actions
Push New Users, Push Profile Updates, Push Groups
Authentication Mode
HTTP Header
Authorization
The Bearer token from CloudThinker
Click Test Connector Configuration, then Save.
3
Turn on To App actions
On Provisioning → To App, click Edit and enable Create Users, Update User Attributes and Deactivate Users. Save.
4
Push groups
On the Push Groups tab, add the groups you want to map to workspaces.
1
Set the admin credentials
Open Enterprise applications → CloudThinker → Provisioning. Set Provisioning Mode to Automatic. Under Admin Credentials, enter the SCIM base URL as Tenant URL and the Bearer token as Secret Token. Click Test Connection, then Save.
2
Check the mappings
Under Mappings, keep user and group provisioning enabled. Confirm the attribute mapped to userName holds the user’s email on a verified domain.
3
Start provisioning
Under Settings, set Scope to Sync only assigned users and groups. Set Provisioning Status to On and save. Entra runs a cycle about every 40 minutes.
IdP field
Value
SCIM base URL / Tenant URL
The SCIM base URL from CloudThinker
Authentication
HTTP header, bearer token
Bearer token / Secret token
The Bearer token from CloudThinker
Unique identifier for users
userName, set to the user’s email address
Turn on create users, update user attributes, deactivate users and push groups. Run your IdP’s Test connection if it has one.
CloudThinker reads these attributes:
Resource
Attribute
Required
Used for
User
userName
Yes
Email, when emails is empty
User
emails
No
Email. The primary entry wins, otherwise the first.
User
name.givenName, name.familyName
No
Display name
User
active
No (default true)
Suspending and reactivating
User
externalId
No
Matching the user in filters
Group
displayName
Yes
The name under Group mappings
Group
members
No
Who gets the group’s workspaces
Group
externalId
No
Matching the group
Success state: assign one test user to the app. Within your IdP’s sync interval they appear in Admin Settings → Organization → Members, and View sync logs shows a CREATE entry with status SUCCESS.What CloudThinker’s SCIM API supports, so you can match your IdP’s options:
Capability
Supported
Users and Groups resources (create, read, replace, patch, delete)
Yes
Filters with eq on userName, emails.value, externalId, active (users) and displayName (groups)
Yes, up to 100 results
Bulk operations
No
Sorting, ETags, password changes
No
If someone already has a CloudThinker account from another organization, CloudThinker adds that existing account to yours only when its email domain is one of your verified SSO domains. Otherwise your IdP gets “User email domain not verified for this organization.”
Groups let one IdP change put a whole team into the right workspaces.
1
Push groups from your IdP
In your IdP, assign the groups to the CloudThinker app and push them.Success state: each group shows up under Group mappings on Admin Settings → Identity and access, with its Group name and Members count. Until then the section reads “No groups synced yet.”
2
Pick workspaces for each group
In the group’s row, open Auto-assigned workspaces and select the workspaces its members should join.
3
Choose the group role
Set Auto-assigned organization role for the group, or leave Inherit from connection to use the default role you set above.CloudThinker sets a member’s organization role once, when it creates them. Later syncs don’t change it, so a role you change by hand in CloudThinker stays.
4
Save the row
Click Save in the Actions column.Success state: current members of the group are added to the selected workspaces, and future members are added when your IdP syncs them into the group.
Group mappings only add workspace access. Removing someone from a group, or removing a workspace from a mapping, doesn’t take them out of that workspace. Remove them in workspace members, or unassign them from the app in your IdP to remove them everywhere.
After the first sync, check new members’ roles in Admin Settings → Organization → Members and adjust any that should differ.
Automations never change owner on their own. A workspace Admin can select Take ownership on the automation’s page, and it stays off until they turn it on. See automation owners.
If your plan uses per-seat billing and every seat is taken, a newly provisioned or reactivated person is added as inactive and can’t use CloudThinker yet. Active members and pending invitations use seats; suspended and inactive members don’t. The Owner adds seats on Admin Settings → Billing; see Add or remove seats. Then check their status in Admin Settings → Organization → Members.
Rotate the token when it may have leaked or your policy requires it:
1
Rotate
In Directory sync (SCIM), click Rotate token, then Rotate in the confirmation.Success state: a dialog shows the new Bearer token and the SCIM base URL. The old token keeps working for 24 hours.
2
Update your IdP
Paste the new token into your IdP’s provisioning settings and test the connection. Do it within 24 hours, or syncs start failing with authentication errors.
Turn off SCIM by choosing Manual or Just-in-time in Provisioning & directory sync, then Disable SCIM in the confirmation. This revokes the token at once and stops directory sync. Existing members keep their accounts, and you manage them in CloudThinker from then on. Turn off provisioning in your IdP too, or it keeps sending requests that fail.Token changes (generate, rotate, revoke) and every user or group that SCIM provisions, updates or removes are recorded in audit logs.
Click View sync logs in Directory sync (SCIM) to open SCIM sync logs.
Column
Shows
Timestamp
When CloudThinker processed the request
Action
CREATE, UPDATE, DEACTIVATE or DELETE
Resource
User or Group, with its ID
Status
SUCCESS, SKIPPED or FAILED
CloudThinker also checks once a day for SCIM-provisioned people with no sync activity for 7 days, and adds an UPDATE entry with status SKIPPED for each one. It’s a reminder only: CloudThinker doesn’t change their access. Check that the person is still assigned in your IdP, and unassign them there if they’ve left.
The Provisioning & directory sync card isn't there
The card only shows when your SSO connection is active. Finish SSO setup, including domain verification. You also need the Owner role.
Groups don't appear under Group mappings
CloudThinker doesn’t pull groups; your IdP has to push them. Assign the groups to the CloudThinker app in your IdP, run a push, then look for Group entries in View sync logs.
A user wasn't provisioned
Confirm the user is assigned to the CloudThinker app in your IdP, then look for a FAILED entry in the sync logs. Common causes: the token was rotated more than 24 hours ago or revoked, the person’s existing account uses an unverified email domain (“User email domain not verified for this organization”), or the email is reserved for an internal CloudThinker account (“This email belongs to a CloudThinker System user”). For the last one, use a different email or contact support.
Someone left but can still sign in
Unassign or deactivate them on the CloudThinker app itself. Removing them from a group only changes group membership. Some IdPs sync on a schedule (Microsoft Entra ID runs about every 40 minutes), so wait for the next cycle and check the sync logs.
All syncs fail with authentication errors
The token in your IdP is no longer valid: the token was rotated more than 24 hours ago, or SCIM was turned off. Click Rotate token and paste the new value into your IdP. If SCIM was turned off, select SCIM again to get a new token.
Cannot enable JIT provisioning while SCIM is active
Just-in-time and SCIM can’t run together. Choose Just-in-time in Provisioning & directory sync and confirm Disable SCIM, which revokes the token and stops directory sync.
I can't invite or remove a member
That’s expected while SCIM is on. Assign or unassign people in your IdP instead.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"CloudThinker","colors":{"primary":"#0c93c0","light":"#2897c1","dark":"#0c93c0"},"logo":{"light":"https://mintcdn.com/cloudthinker/-4m9DUjwzDxHfABz/logo/light.svg?fit=max\u0026auto=format\u0026n=-4m9DUjwzDxHfABz\u0026q=85\u0026s=a56a571509d1cd246f5b0e68db015e5f","dark":"https://mintcdn.com/cloudthinker/-4m9DUjwzDxHfABz/logo/dark.svg?fit=max\u0026auto=format\u0026n=-4m9DUjwzDxHfABz\u0026q=85\u0026s=4252f33496bbaa527e5408338963a31e"},"favicon":"https://mintcdn.com/cloudthinker/PoYnb4baZ54aMMQW/favicon.ico?fit=max\u0026auto=format\u0026n=PoYnb4baZ54aMMQW\u0026q=85\u0026s=6570e99ed2a763d9632c8f933fe9c164","background":{"color":{"light":"#eef0f3","dark":"#000000"}},"navbar":{"links":[{"href":"https://discord.com/invite/sRBWRWtaNR","label":"Community"},{"href":"https://cloudthinker.io/blogs","label":"Blog"},{"href":"https://cloudthinker.io/contact","label":"Contact us"}],"primary":{"type":"button","label":"Open app","href":"https://app.cloudthinker.io"}},"footer":{"socials":{"x":"https://x.com/cloudthinkerio?s=21","linkedin":"https://www.linkedin.com/company/cloud-thinker","github":"https://github.com/cloudthinker-ai","discord":"https://discord.com/invite/sRBWRWtaNR","youtube":"https://www.youtube.com/@cloudthinkerai"}},"seo":{"indexing":"navigable"},"fonts":{"family":"Poppins"},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"metadata":{"timestamp":false},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","href":""},{"language":"vi","href":""},{"language":"ja","href":""},{"language":"ko","href":""}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cloudthinker","hasAudioNarration":false,"actualSubdomain":"cloudthinker","customDomains":["docs.cloudthinker.io"],"gitSource":{"type":"github","owner":"nhat-tranvan","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adddcaa087fb564296de741","collectionId":"6a0410ef-ac7e-420e-bb09-2fef712f563e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adddcaa087fb564296de741"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{},"buildId":"6adddcaa087fb564296de741","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"Platform","count":67},{"language":"vi","tag":"Nền tảng","count":64},{"language":"en","tag":"Platform","count":63},{"language":"ja","tag":"プラットフォーム","count":63},{"language":"ko","tag":"플랫폼","count":63},{"language":"default","tag":"Connections","count":52},{"language":"vi","tag":"Kết nối","count":49},{"language":"en","tag":"Connections","count":48},{"language":"ja","tag":"接続","count":48},{"language":"ko","tag":"연결","count":48},{"language":"en","tag":"Products","count":29},{"language":"ja","tag":"プロダクト","count":29},{"language":"ko","tag":"제품","count":29},{"language":"vi","tag":"Sản phẩm","count":29},{"language":"default","tag":"Resources","count":26},{"language":"default","tag":"Products","count":24},{"language":"default","tag":"Learn","count":18},{"language":"default","tag":"Agentic Infrastructure Operations - Engineer Edition","count":18},{"language":"default","tag":"Get started","count":13},{"language":"en","tag":"Get started","count":13},{"language":"en","tag":"Resources","count":13},{"language":"ja","tag":"はじめに","count":13},{"language":"ja","tag":"リソース","count":13},{"language":"ko","tag":"시작하기","count":13},{"language":"ko","tag":"리소스","count":13},{"language":"vi","tag":"Bắt đầu","count":13},{"language":"vi","tag":"Tài nguyên","count":13},{"language":"en","tag":"Learn","count":12},{"language":"en","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"ja","tag":"Observability \u0026 Monitoring","count":12},{"language":"ja","tag":"学ぶ","count":12},{"language":"ja","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"ko","tag":"Observability \u0026 Monitoring","count":12},{"language":"ko","tag":"배우기","count":12},{"language":"ko","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"vi","tag":"Observability \u0026 Monitoring","count":12},{"language":"vi","tag":"Học","count":12},{"language":"vi","tag":"Agentic Infrastructure Operations - Leadership Edition","count":12},{"language":"en","tag":"Monitoring","count":11},{"language":"en","tag":"Resolve","count":11},{"language":"ja","tag":"Resolve","count":11},{"language":"ko","tag":"Resolve","count":11},{"language":"vi","tag":"Resolve","count":11},{"language":"default","tag":"Resolve","count":9},{"language":"vi","tag":"Databases","count":9},{"language":"ja","tag":"Databases","count":8},{"language":"ko","tag":"Databases","count":8},{"language":"en","tag":"Work where you are","count":7},{"language":"default","tag":"Review","count":6},{"language":"default","tag":"Set up","count":6}]},"assistantConfig":{},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":".ct-landing a,a.ct-featured{text-decoration:none!important}a.ct-featured{display:block;margin:1.25rem 0 1rem;padding:1.75rem 1.75rem 1.5rem;border:1px solid rgba(12,147,192,.45)!important;border-radius:16px;background:radial-gradient(120% 160% at 0 0,rgba(12,147,192,.14),transparent 55%),#fff;box-shadow:0 12px 32px -16px rgba(12,147,192,.45);transition:border-color .15s ease,transform .15s ease,box-shadow .15s ease}a.ct-featured:hover{border-color:#0c93c0!important;transform:translateY(-1px);box-shadow:0 16px 40px -16px rgba(12,147,192,.6)}.dark a.ct-featured{border-color:rgba(40,151,193,.45)!important;background:radial-gradient(120% 160% at 0 0,rgba(40,151,193,.16),transparent 55%),#05070a;box-shadow:0 12px 32px -16px rgba(40,151,193,.35)}.dark a.ct-featured:hover{border-color:#2897c1!important}.ct-featured-head{display:flex;align-items:center;gap:.75rem;margin-bottom:.875rem}.ct-featured-icon{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:999px;background:rgba(12,147,192,.12);color:#0a7aa0}.dark .ct-featured-icon{background:rgba(40,151,193,.14);color:#5bb8e0}.ct-eyebrow{font-size:.75rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#0a7aa0}.dark .ct-eyebrow{color:#5bb8e0}.ct-hero h1,.ct-title{font-weight:600;color:#0b1a2b}.ct-title{font-size:1.375rem;line-height:1.3}.dark .ct-card .ct-card-head span,.dark .ct-card h3,.dark .ct-hero h1,.dark .ct-section>h2,.dark .ct-step h3,.dark .ct-title{color:#f5f5f7}.ct-body{margin:.5rem 0 0!important;font-weight:400!important;font-size:1rem;max-width:46rem;color:#5b6577;line-height:1.6}.dark .ct-body,.dark .ct-hero .ct-promise,.dark .ct-hero p.ct-lead,.dark .ct-section>p.ct-section-lead{color:#a1a1a6}.ct-cta{display:inline-block;margin-top:1rem;font-weight:600;color:#0a7aa0}.dark .ct-cta{color:#5bb8e0}.ct-illustration{margin:1.5rem 0}.ct-illustration img{max-width:720px;margin:0 auto}.ct-iso-scene{margin:1.5rem 0 2rem;border:1px solid rgba(12,147,192,.18);border-radius:16px;background:#fff;overflow:hidden}.dark .ct-iso-scene{border-color:rgba(40,151,193,.22);background:#000}.ct-illustration img,.ct-iso-scene .ct-iso-svg{display:block;width:100%;height:auto}.ct-landing{max-width:1120px;margin:0 auto;padding:3rem 1.5rem 5rem}.ct-landing a{border-bottom-width:0}.ct-kicker{font-size:.8125rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#0c93c0}.dark .ct-card .ct-tagline,.dark .ct-hero .ct-promise strong,.dark .ct-kicker{color:#2897c1}.ct-hero{text-align:center;padding:1.5rem 0 1rem}.ct-hero h1{margin:.75rem 0 0;font-size:clamp(2.25rem,5vw,3.75rem);line-height:1.05;letter-spacing:-.03em;-webkit-text-fill-color:currentColor;background:0 0}.ct-hero .ct-promise{margin:1rem auto 0;font-size:clamp(1.125rem,2.2vw,1.5rem);color:#5b6577}.ct-hero .ct-promise strong,.ct-section>h2{color:#0c93c0;font-weight:600}.ct-hero p.ct-lead{max-width:44rem;margin:1rem auto 0;font-size:1.0625rem;line-height:1.65;color:#5b6577}.ct-actions{display:flex;flex-wrap:wrap;gap:.75rem;justify-content:center;margin-top:1.75rem}.ct-btn{display:inline-flex;align-items:center;gap:.5rem;padding:.7rem 1.25rem;border-radius:999px;font-weight:600;font-size:.95rem;transition:transform .15s ease,background .15s ease}.ct-btn:hover{transform:translateY(-1px)}.ct-btn-primary{background:#0c93c0;color:#fff!important}.ct-btn-primary:hover{background:#0a7aa0}.ct-btn-ghost{border:1px solid rgba(12,147,192,.35)!important;color:#0b1a2b!important}.dark .ct-btn-ghost{color:#f5f5f7!important;border-color:rgba(40,151,193,.4)!important}.ct-landing .ct-iso-scene{margin-top:2.5rem}.ct-section{margin-top:4.5rem}.ct-section>h2{margin:.4rem 0 0;font-size:1.75rem;letter-spacing:-.02em;color:#0b1a2b;-webkit-text-fill-color:currentColor;background:0 0}.ct-section>p.ct-section-lead{margin:.5rem 0 0;color:#5b6577;max-width:46rem}.ct-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin-top:1.5rem}.ct-step{display:block;padding:1.25rem;border-radius:14px;border:1px solid rgba(12,147,192,.18)!important;background:#fff;transition:border-color .15s ease,transform .15s ease}.dark .ct-step{background:#05070a;border-color:rgba(40,151,193,.22)!important}.ct-step:hover{border-color:#0c93c0!important;transform:translateY(-1px)}.ct-step-num{display:inline-flex;width:1.75rem;height:1.75rem;border-radius:999px;align-items:center;justify-content:center;font-size:.85rem;font-weight:700;color:#fff;background:#0c93c0}.ct-card h3,.ct-step h3{margin:.75rem 0 .25rem;font-size:1.05rem}.ct-card p,.ct-step p{margin:0;font-size:.925rem;line-height:1.55;color:#5b6577}.dark .ct-card p,.dark .ct-landing td,.dark .ct-step p{color:#a1a1a6}.ct-grid{display:grid;gap:1rem;margin-top:1.5rem}.ct-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ct-grid-5{grid-template-columns:repeat(5,minmax(0,1fr))}.ct-card{display:flex;flex-direction:column;padding:1.25rem;border-radius:14px;border:1px solid rgba(12,147,192,.18);background:#fff}.dark .ct-card{background:#05070a;border-color:rgba(40,151,193,.22)}.ct-card .ct-card-head{display:flex;align-items:center;gap:.6rem}.ct-card .ct-card-head span,.ct-card h3,.ct-step h3{font-weight:600;color:#0b1a2b}.ct-card .ct-tagline{margin-top:.75rem;font-size:1.05rem;font-weight:600;line-height:1.35;color:#0c93c0}.ct-card .ct-links{margin-top:auto;padding-top:1rem;display:flex;gap:1rem;font-size:.9rem;font-weight:600}.ct-card .ct-links a{color:#0c93c0!important}.dark .ct-card .ct-links a,.dark .ct-card-head .ct-arrow,.dark .ct-landing td a{color:#2897c1!important}a.ct-card{transition:border-color .15s ease,transform .15s ease}a.ct-card:hover{border-color:#0c93c0!important;transform:translateY(-1px)}.ct-strip{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1.25rem}.ct-strip a{display:inline-flex;align-items:center;gap:.45rem;padding:.55rem .95rem;border-radius:999px;border:1px solid rgba(12,147,192,.25)!important;font-size:.9rem;font-weight:500;color:#0b1a2b!important}.dark .ct-strip a{color:#f5f5f7!important;border-color:rgba(40,151,193,.3)!important}.ct-strip a:hover{border-color:#0c93c0!important}@media (max-width:900px){.ct-grid-3,.ct-grid-5,.ct-steps{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:560px){.ct-landing{padding:2rem 1rem 4rem}.ct-grid-3,.ct-grid-5,.ct-steps{grid-template-columns:minmax(0,1fr)}}.ct-landing table{width:100%;margin-top:1.25rem;border-collapse:collapse;font-size:.925rem}.ct-landing th{text-align:left;font-weight:600;padding:.7rem .9rem;border-bottom:1px solid rgba(12,147,192,.3)}.ct-landing td{vertical-align:top;padding:.8rem .9rem;border-bottom:1px solid rgba(12,147,192,.12);color:#5b6577;line-height:1.55}.ct-landing td:first-child{font-weight:600;color:#0b1a2b;width:22%}.dark .ct-landing td:first-child{color:#f5f5f7}.ct-landing td a{color:#0c93c0!important;font-weight:600}.ct-product{padding:1.1rem 1.2rem}.ct-product .ct-tagline{margin-top:.55rem;font-size:1rem}.ct-product p{margin-top:.3rem}.ct-card-head .ct-arrow{margin-left:auto;font-weight:500!important;color:#0c93c0!important;transition:transform .15s ease}a.ct-product:hover .ct-arrow{transform:translateX(3px)}html:not(.dark) .ct-card,html:not(.dark) .ct-iso-scene,html:not(.dark) .ct-step{background:#f6f7f9}html:not(.dark) .ct-iso-scene{border-color:rgba(12,147,192,.12)}html:not(.dark) #content-area,html:not(.dark) .prose,html:not(.dark) body{color:#2b3240}html:not(.dark) .prose :where(h1, h2, h3, h4, strong){color:#1c2230}html:not(.dark) .ct-card .ct-card-head span,html:not(.dark) .ct-card h3,html:not(.dark) .ct-hero h1,html:not(.dark) .ct-section>h2,html:not(.dark) .ct-step h3{color:#1c2230}"}],"page":{"pagePath":"guide/security/scim","slug":"/guide/security/scim","pageMetadata":{"title":"SCIM Provisioning","description":"Connect your identity provider to CloudThinker with SCIM 2.0 so people are added, suspended, and removed as your directory changes.","icon":"users-gear","href":"/guide/security/scim"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect your identity provider to CloudThinker with SCIM 2.0 so people are added, suspended, and removed as your directory changes.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Heading,Note,Step,Steps,Tab,Table,Tabs,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`SCIM (System for Cross-domain Identity Management) lets your identity provider (IdP), such as Okta or Microsoft Entra ID, manage CloudThinker accounts for you. Assign someone to the CloudThinker app in your IdP and they join your organization; unassign them and their access ends, with no manual invites or removals.`}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`An organization on the `,_jsx(_components.strong,{children:`Scale`}),`, `,_jsx(_components.strong,{children:`Scale Plus`}),` or `,_jsx(_components.strong,{children:`Enterprise`}),` plan. See `,_jsx(_components.a,{href:`/guide/billing/pricing`,children:`Pricing`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`An active `,_jsx(_components.a,{href:`/guide/security/sso`,children:`SSO connection`}),` with a verified domain. The provisioning settings only appear once SSO is active.`]}),`\n`,_jsxs(_components.li,{children:[`The organization `,_jsx(_components.strong,{children:`Owner`}),` role in CloudThinker. Admins can’t manage SSO or SCIM. See `,_jsx(_components.a,{href:`/guide/security/roles`,children:`Roles and permissions`}),`.`]}),`\n`,_jsx(_components.li,{children:`Admin access to the provisioning settings of your CloudThinker app in your IdP.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-scim-changes-in-cloudthinker`,children:`What SCIM changes in CloudThinker`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`In your IdP`}),_jsx(_components.th,{children:`In CloudThinker`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Assign a person to the CloudThinker app`}),_jsxs(_components.td,{children:[`They’re added to your organization with the `,_jsx(_components.strong,{children:`Auto-assigned organization role`}),` and get the `,_jsx(_components.strong,{children:`Auto-assigned workspaces`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Change their name or email`}),_jsx(_components.td,{children:`Their CloudThinker profile updates`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Deactivate them (set inactive)`}),_jsx(_components.td,{children:`Their membership is suspended and they lose access to every workspace`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Reactivate them`}),_jsx(_components.td,{children:`Their membership comes back, with the auto-assigned workspaces`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Delete them (SCIM `,_jsx(_components.code,{children:`DELETE`}),`)`]}),_jsx(_components.td,{children:`They’re removed from the organization`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Push a group`}),_jsxs(_components.td,{children:[`The group appears under `,_jsx(_components.strong,{children:`Group mappings`}),`, where you pick workspaces for its members`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Unassigning someone from the app usually counts as a deactivation, not a delete. Okta and Microsoft Entra ID both send `,_jsx(_components.code,{children:`active=false`}),` when you unassign a user, so the person is `,_jsx(_components.strong,{children:`suspended`}),` in CloudThinker, not removed. They’re removed only when your IdP sends a `,_jsx(_components.code,{children:`DELETE`}),`.`]}),`\n`,_jsx(_components.p,{children:`While SCIM is on, your IdP is the source of truth for who’s in the organization:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Member invitations are turned off.`}),` Inviting from CloudThinker returns “Member invitations are disabled because this organization uses SCIM provisioning.”`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`You can’t remove a SCIM-provisioned member in CloudThinker.`}),` The error reads “This member was provisioned via SCIM.” Remove them in your IdP instead.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Just-in-time provisioning is turned off.`}),` SCIM and just-in-time (accounts created on first SSO sign-in) can’t run together. Turning on SCIM switches just-in-time off for you. Someone on your domain whom your IdP hasn’t provisioned is refused at SSO sign-in with “No account found. Contact your administrator for access.” until your IdP provisions them.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`You can still change a member’s role or workspace access in CloudThinker. See `,_jsx(_components.a,{href:`/guide/organization`,children:`Organization`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`turn-on-scim-in-cloudthinker`,children:`Turn on SCIM in CloudThinker`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Open the provisioning settings`,children:[_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Admin Settings → Identity and access`}),` and find the `,_jsx(_components.strong,{children:`Provisioning \u0026 directory sync`}),` card under your SSO connection.`]}),_jsxs(_components.p,{children:[`If the card is missing, your SSO connection isn’t active yet. Finish `,_jsx(_components.a,{href:`/guide/security/sso`,children:`SSO setup`}),` first.`]})]}),_jsxs(Step,{title:`Choose SCIM`,children:[_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`SCIM`}),` (Sync users and groups from your identity provider). The other options are `,_jsx(_components.strong,{children:`Manual`}),` (you invite people yourself) and `,_jsx(_components.strong,{children:`Just-in-time`}),` (accounts are created on first SSO sign-in).`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Success state:`}),` the `,_jsx(_components.strong,{children:`SCIM enabled`}),` dialog opens.`]})]}),_jsxs(Step,{title:`Copy the two values`,children:[_jsx(_components.p,{children:`The dialog shows:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Bearer token`}),`: the secret your IdP sends to prove its requests are allowed.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SCIM base URL`}),`: the endpoint your IdP calls. It looks like `,_jsx(_components.code,{children:`https://\u003cyour-cloudthinker-host>/api/v1/scim/\u003corganization-id>/v2`}),`.`]}),`\n`]}),_jsxs(_components.p,{children:[`Copy both, then click `,_jsx(_components.strong,{children:`Done`}),`.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Success state:`}),` the card shows `,_jsx(_components.strong,{children:`Directory sync (SCIM)`}),` with “SCIM directory sync is active.”`]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The bearer token is shown only once. If you close the dialog without copying it, click `,_jsx(_components.strong,{children:`Rotate token`}),` to get a new one.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`set-defaults-for-new-members`,children:`Set defaults for new members`}),`\n`,_jsx(_components.p,{children:`Below the provisioning options, two settings decide what a newly provisioned person gets. Set them before your IdP sends its first users.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`What it does`}),_jsx(_components.th,{children:`Default`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Auto-assigned organization role`})}),_jsxs(_components.td,{children:[`The organization role new members get: `,_jsx(_components.strong,{children:`Viewer`}),`, `,_jsx(_components.strong,{children:`Developer`}),` or `,_jsx(_components.strong,{children:`Admin`})]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Viewer`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Auto-assigned workspaces`})}),_jsx(_components.td,{children:`The workspaces new members join`}),_jsx(_components.td,{children:`Your default workspace`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Owner can’t be assigned this way. For what each role can do, see `,_jsx(_components.a,{href:`/guide/security/roles`,children:`Roles and permissions`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`configure-your-identity-provider`,children:`Configure your identity provider`}),`\n`,_jsx(_components.p,{children:`Use the CloudThinker app you created for SSO.`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Okta`,id:`okta`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Enable SCIM on the app`,children:_jsxs(_components.p,{children:[`Open the CloudThinker app. On the `,_jsx(_components.strong,{children:`General`}),` tab, click `,_jsx(_components.strong,{children:`Edit`}),` under `,_jsx(_components.strong,{children:`App Settings`}),`, set `,_jsx(_components.strong,{children:`Provisioning`}),` to `,_jsx(_components.strong,{children:`SCIM`}),`, and save.`]})}),_jsxs(Step,{title:`Enter the connection details`,children:[_jsxs(_components.p,{children:[`On `,_jsx(_components.strong,{children:`Provisioning → Integration`}),`, click `,_jsx(_components.strong,{children:`Edit`}),`:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Okta field`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`SCIM connector base URL`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`SCIM base URL`}),` from CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Unique identifier field for users`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`userName`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Supported provisioning actions`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Push New Users`}),`, `,_jsx(_components.strong,{children:`Push Profile Updates`}),`, `,_jsx(_components.strong,{children:`Push Groups`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Authentication Mode`})}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`HTTP Header`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Authorization`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`Bearer token`}),` from CloudThinker`]})]})]})]}),_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Test Connector Configuration`}),`, then `,_jsx(_components.strong,{children:`Save`}),`.`]})]}),_jsx(Step,{title:`Turn on To App actions`,children:_jsxs(_components.p,{children:[`On `,_jsx(_components.strong,{children:`Provisioning → To App`}),`, click `,_jsx(_components.strong,{children:`Edit`}),` and enable `,_jsx(_components.strong,{children:`Create Users`}),`, `,_jsx(_components.strong,{children:`Update User Attributes`}),` and `,_jsx(_components.strong,{children:`Deactivate Users`}),`. Save.`]})}),_jsx(Step,{title:`Push groups`,children:_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Push Groups`}),` tab, add the groups you want to map to workspaces.`]})})]})}),_jsx(Tab,{title:`Microsoft Entra ID`,id:`microsoft-entra-id`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Set the admin credentials`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`Enterprise applications → CloudThinker → Provisioning`}),`. Set `,_jsx(_components.strong,{children:`Provisioning Mode`}),` to `,_jsx(_components.strong,{children:`Automatic`}),`. Under `,_jsx(_components.strong,{children:`Admin Credentials`}),`, enter the `,_jsx(_components.strong,{children:`SCIM base URL`}),` as `,_jsx(_components.strong,{children:`Tenant URL`}),` and the `,_jsx(_components.strong,{children:`Bearer token`}),` as `,_jsx(_components.strong,{children:`Secret Token`}),`. Click `,_jsx(_components.strong,{children:`Test Connection`}),`, then `,_jsx(_components.strong,{children:`Save`}),`.`]})}),_jsx(Step,{title:`Check the mappings`,children:_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Mappings`}),`, keep user and group provisioning enabled. Confirm the attribute mapped to `,_jsx(_components.code,{children:`userName`}),` holds the user’s email on a verified domain.`]})}),_jsx(Step,{title:`Start provisioning`,children:_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Settings`}),`, set `,_jsx(_components.strong,{children:`Scope`}),` to `,_jsx(_components.strong,{children:`Sync only assigned users and groups`}),`. Set `,_jsx(_components.strong,{children:`Provisioning Status`}),` to `,_jsx(_components.strong,{children:`On`}),` and save. Entra runs a cycle about every 40 minutes.`]})})]})}),_jsxs(Tab,{title:`Other SCIM 2.0 provider`,id:`other-scim-2-0-provider`,children:[_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`IdP field`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`SCIM base URL / Tenant URL`}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`SCIM base URL`}),` from CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Authentication`}),_jsx(_components.td,{children:`HTTP header, bearer token`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bearer token / Secret token`}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`Bearer token`}),` from CloudThinker`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Unique identifier for users`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`userName`}),`, set to the user’s email address`]})]})]})]}),_jsxs(_components.p,{children:[`Turn on create users, update user attributes, deactivate users and push groups. Run your IdP’s `,_jsx(_components.strong,{children:`Test connection`}),` if it has one.`]})]})]}),`\n`,_jsx(_components.p,{children:`CloudThinker reads these attributes:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Resource`}),_jsx(_components.th,{children:`Attribute`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Used for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`User`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`userName`})}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[`Email, when `,_jsx(_components.code,{children:`emails`}),` is empty`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`User`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`emails`})}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Email. The `,_jsx(_components.code,{children:`primary`}),` entry wins, otherwise the first.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`User`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`name.givenName`}),`, `,_jsx(_components.code,{children:`name.familyName`})]}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Display name`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`User`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`active`})}),_jsxs(_components.td,{children:[`No (default `,_jsx(_components.code,{children:`true`}),`)`]}),_jsx(_components.td,{children:`Suspending and reactivating`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`User`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`externalId`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Matching the user in filters`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Group`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`displayName`})}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[`The name under `,_jsx(_components.strong,{children:`Group mappings`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Group`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`members`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Who gets the group’s workspaces`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Group`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`externalId`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Matching the group`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Success state:`}),` assign one test user to the app. Within your IdP’s sync interval they appear in `,_jsx(_components.strong,{children:`Admin Settings → Organization → Members`}),`, and `,_jsx(_components.strong,{children:`View sync logs`}),` shows a `,_jsx(_components.code,{children:`CREATE`}),` entry with status `,_jsx(_components.code,{children:`SUCCESS`}),`.`]}),`\n`,_jsx(_components.p,{children:`What CloudThinker’s SCIM API supports, so you can match your IdP’s options:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Capability`}),_jsx(_components.th,{children:`Supported`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Users and Groups resources (create, read, replace, patch, delete)`}),_jsx(_components.td,{children:`Yes`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Filters with `,_jsx(_components.code,{children:`eq`}),` on `,_jsx(_components.code,{children:`userName`}),`, `,_jsx(_components.code,{children:`emails.value`}),`, `,_jsx(_components.code,{children:`externalId`}),`, `,_jsx(_components.code,{children:`active`}),` (users) and `,_jsx(_components.code,{children:`displayName`}),` (groups)`]}),_jsx(_components.td,{children:`Yes, up to 100 results`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Bulk operations`}),_jsx(_components.td,{children:`No`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Sorting, ETags, password changes`}),_jsx(_components.td,{children:`No`})]})]})]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`If someone already has a CloudThinker account from another organization, CloudThinker adds that existing account to yours only when its email domain is one of your verified SSO domains. Otherwise your IdP gets “User email domain not verified for this organization.”`})}),`\n`,_jsx(Heading,{level:`2`,id:`map-groups-to-workspaces`,children:`Map groups to workspaces`}),`\n`,_jsx(_components.p,{children:`Groups let one IdP change put a whole team into the right workspaces.`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Push groups from your IdP`,children:[_jsx(_components.p,{children:`In your IdP, assign the groups to the CloudThinker app and push them.`}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Success state:`}),` each group shows up under `,_jsx(_components.strong,{children:`Group mappings`}),` on `,_jsx(_components.strong,{children:`Admin Settings → Identity and access`}),`, with its `,_jsx(_components.strong,{children:`Group name`}),` and `,_jsx(_components.strong,{children:`Members`}),` count. Until then the section reads “No groups synced yet.”`]})]}),_jsx(Step,{title:`Pick workspaces for each group`,children:_jsxs(_components.p,{children:[`In the group’s row, open `,_jsx(_components.strong,{children:`Auto-assigned workspaces`}),` and select the workspaces its members should join.`]})}),_jsxs(Step,{title:`Choose the group role`,children:[_jsxs(_components.p,{children:[`Set `,_jsx(_components.strong,{children:`Auto-assigned organization role`}),` for the group, or leave `,_jsx(_components.strong,{children:`Inherit from connection`}),` to use the default role you set above.`]}),_jsx(_components.p,{children:`CloudThinker sets a member’s organization role once, when it creates them. Later syncs don’t change it, so a role you change by hand in CloudThinker stays.`})]}),_jsxs(Step,{title:`Save the row`,children:[_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Save`}),` in the `,_jsx(_components.strong,{children:`Actions`}),` column.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Success state:`}),` current members of the group are added to the selected workspaces, and future members are added when your IdP syncs them into the group.`]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Group mappings only add workspace access. Removing someone from a group, or removing a workspace from a mapping, doesn’t take them out of that workspace. Remove them in `,_jsx(_components.a,{href:`/guide/workspace-users`,children:`workspace members`}),`, or unassign them from the app in your IdP to remove them everywhere.`]})}),`\n`,_jsxs(_components.p,{children:[`After the first sync, check new members’ roles in `,_jsx(_components.strong,{children:`Admin Settings → Organization → Members`}),` and adjust any that should differ.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-happens-when-someone-leaves`,children:`What happens when someone leaves`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`IdP action`}),_jsx(_components.th,{children:`Membership in CloudThinker`}),_jsx(_components.th,{children:`Workspaces`}),_jsx(_components.th,{children:`Their automations`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Deactivate (set inactive)`}),_jsx(_components.td,{children:`Suspended`}),_jsx(_components.td,{children:`Removed from all`}),_jsx(_components.td,{children:`Turned off`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Reactivate`}),_jsx(_components.td,{children:`Active again, if a seat is free`}),_jsx(_components.td,{children:`Auto-assigned workspaces only; re-add the rest`}),_jsx(_components.td,{children:`Stay off until someone turns them on`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Delete (SCIM `,_jsx(_components.code,{children:`DELETE`}),`)`]}),_jsx(_components.td,{children:`Removed`}),_jsx(_components.td,{children:`Removed from all`}),_jsx(_components.td,{children:`Turned off`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/guide/automation/automations`,children:`Automations`}),` never change owner on their own. A workspace Admin can select `,_jsx(_components.strong,{children:`Take ownership`}),` on the automation’s page, and it stays off until they turn it on. See `,_jsx(_components.a,{href:`/guide/automation/autonomous-agents`,children:`automation owners`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`If your plan uses per-seat billing and every seat is taken, a newly provisioned or reactivated person is added as inactive and can’t use CloudThinker yet. Active members and pending invitations use seats; suspended and inactive members don’t. The Owner adds seats on `,_jsx(_components.strong,{children:`Admin Settings → Billing`}),`; see `,_jsx(_components.a,{href:`/guide/billing/subscription#add-or-remove-seats`,children:`Add or remove seats`}),`. Then check their status in `,_jsx(_components.strong,{children:`Admin Settings → Organization → Members`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`rotate-or-turn-off-the-token`,children:`Rotate or turn off the token`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Rotate the token`}),` when it may have leaked or your policy requires it:`]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Rotate`,children:[_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Directory sync (SCIM)`}),`, click `,_jsx(_components.strong,{children:`Rotate token`}),`, then `,_jsx(_components.strong,{children:`Rotate`}),` in the confirmation.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Success state:`}),` a dialog shows the new `,_jsx(_components.strong,{children:`Bearer token`}),` and the `,_jsx(_components.strong,{children:`SCIM base URL`}),`. The old token keeps working for 24 hours.`]})]}),_jsx(Step,{title:`Update your IdP`,children:_jsx(_components.p,{children:`Paste the new token into your IdP’s provisioning settings and test the connection. Do it within 24 hours, or syncs start failing with authentication errors.`})})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Turn off SCIM`}),` by choosing `,_jsx(_components.strong,{children:`Manual`}),` or `,_jsx(_components.strong,{children:`Just-in-time`}),` in `,_jsx(_components.strong,{children:`Provisioning \u0026 directory sync`}),`, then `,_jsx(_components.strong,{children:`Disable SCIM`}),` in the confirmation. This revokes the token at once and stops directory sync. Existing members keep their accounts, and you manage them in CloudThinker from then on. Turn off provisioning in your IdP too, or it keeps sending requests that fail.`]}),`\n`,_jsxs(_components.p,{children:[`Token changes (generate, rotate, revoke) and every user or group that SCIM provisions, updates or removes are recorded in `,_jsx(_components.a,{href:`/guide/security/audit-logs`,children:`audit logs`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`check-sync-activity`,children:`Check sync activity`}),`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`View sync logs`}),` in `,_jsx(_components.strong,{children:`Directory sync (SCIM)`}),` to open `,_jsx(_components.strong,{children:`SCIM sync logs`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Column`}),_jsx(_components.th,{children:`Shows`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Timestamp`})}),_jsx(_components.td,{children:`When CloudThinker processed the request`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Action`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`CREATE`}),`, `,_jsx(_components.code,{children:`UPDATE`}),`, `,_jsx(_components.code,{children:`DEACTIVATE`}),` or `,_jsx(_components.code,{children:`DELETE`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Resource`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`User`}),` or `,_jsx(_components.code,{children:`Group`}),`, with its ID`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Status`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`SUCCESS`}),`, `,_jsx(_components.code,{children:`SKIPPED`}),` or `,_jsx(_components.code,{children:`FAILED`})]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`CloudThinker also checks once a day for SCIM-provisioned people with no sync activity for 7 days, and adds an `,_jsx(_components.code,{children:`UPDATE`}),` entry with status `,_jsx(_components.code,{children:`SKIPPED`}),` for each one. It’s a reminder only: CloudThinker doesn’t change their access. Check that the person is still assigned in your IdP, and unassign them there if they’ve left.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`The Provisioning \u0026 directory sync card isn't there`,id:`the-provisioning-and-directory-sync-card-isnt-there`,children:_jsxs(_components.p,{children:[`The card only shows when your SSO connection is active. Finish `,_jsx(_components.a,{href:`/guide/security/sso`,children:`SSO setup`}),`, including domain verification. You also need the Owner role.`]})}),_jsx(Accordion,{title:`Groups don't appear under Group mappings`,id:`groups-dont-appear-under-group-mappings`,children:_jsxs(_components.p,{children:[`CloudThinker doesn’t pull groups; your IdP has to push them. Assign the groups to the CloudThinker app in your IdP, run a push, then look for `,_jsx(_components.code,{children:`Group`}),` entries in `,_jsx(_components.strong,{children:`View sync logs`}),`.`]})}),_jsx(Accordion,{title:`A user wasn't provisioned`,id:`a-user-wasnt-provisioned`,children:_jsxs(_components.p,{children:[`Confirm the user is assigned to the CloudThinker app in your IdP, then look for a `,_jsx(_components.code,{children:`FAILED`}),` entry in the sync logs. Common causes: the token was rotated more than 24 hours ago or revoked, the person’s existing account uses an unverified email domain (“User email domain not verified for this organization”), or the email is reserved for an internal CloudThinker account (“This email belongs to a CloudThinker System user”). For the last one, use a different email or contact support.`]})}),_jsx(Accordion,{title:`Someone left but can still sign in`,id:`someone-left-but-can-still-sign-in`,children:_jsx(_components.p,{children:`Unassign or deactivate them on the CloudThinker app itself. Removing them from a group only changes group membership. Some IdPs sync on a schedule (Microsoft Entra ID runs about every 40 minutes), so wait for the next cycle and check the sync logs.`})}),_jsx(Accordion,{title:`All syncs fail with authentication errors`,id:`all-syncs-fail-with-authentication-errors`,children:_jsxs(_components.p,{children:[`The token in your IdP is no longer valid: the token was rotated more than 24 hours ago, or SCIM was turned off. Click `,_jsx(_components.strong,{children:`Rotate token`}),` and paste the new value into your IdP. If SCIM was turned off, select `,_jsx(_components.strong,{children:`SCIM`}),` again to get a new token.`]})}),_jsx(Accordion,{title:`Cannot enable JIT provisioning while SCIM is active`,id:`cannot-enable-jit-provisioning-while-scim-is-active`,children:_jsxs(_components.p,{children:[`Just-in-time and SCIM can’t run together. Choose `,_jsx(_components.strong,{children:`Just-in-time`}),` in `,_jsx(_components.strong,{children:`Provisioning \u0026 directory sync`}),` and confirm `,_jsx(_components.strong,{children:`Disable SCIM`}),`, which revokes the token and stops directory sync.`]})}),_jsx(Accordion,{title:`I can't invite or remove a member`,id:`i-cant-invite-or-remove-a-member`,children:_jsx(_components.p,{children:`That’s expected while SCIM is on. Assign or unassign people in your IdP instead.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Roles and permissions`,icon:`user-shield`,href:`/guide/security/roles`,children:_jsx(_components.p,{children:`Pick the right default role for provisioned members.`})}),_jsx(Card,{title:`Workspace members`,icon:`users`,href:`/guide/workspace-users`,children:_jsx(_components.p,{children:`Fine-tune who can open each workspace.`})}),_jsx(Card,{title:`Audit logs`,icon:`clipboard-list`,href:`/guide/security/audit-logs`,children:_jsx(_components.p,{children:`Review token changes and deprovisioning.`})}),_jsx(Card,{title:`Single sign-on`,icon:`key`,href:`/guide/security/sso`,children:_jsx(_components.p,{children:`Change your SSO connection or verified domains.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"SCIM Provisioning","description":"Connect your identity provider to CloudThinker with SCIM 2.0 so people are added, suspended, and removed as your directory changes.","icon":"users-gear","href":"/guide/security/scim"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"What SCIM changes in CloudThinker","slug":"what-scim-changes-in-cloudthinker","depth":2,"children":[]},{"title":"Turn on SCIM in CloudThinker","slug":"turn-on-scim-in-cloudthinker","depth":2,"children":[]},{"title":"Set defaults for new members","slug":"set-defaults-for-new-members","depth":2,"children":[]},{"title":"Configure your identity provider","slug":"configure-your-identity-provider","depth":2,"children":[]},{"title":"Map groups to workspaces","slug":"map-groups-to-workspaces","depth":2,"children":[]},{"title":"What happens when someone leaves","slug":"what-happens-when-someone-leaves","depth":2,"children":[]},{"title":"Rotate or turn off the token","slug":"rotate-or-turn-off-the-token","depth":2,"children":[]},{"title":"Check sync activity","slug":"check-sync-activity","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cloudthinker","siteName":"CloudThinker","title":"SCIM Provisioning - CloudThinker","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/guide/security/scim","matchLevel":0},"vi":{"href":"/vi/guide/security/scim","matchLevel":1},"ja":{"href":"/ja/guide/security/scim","matchLevel":1},"ko":{"href":"/ko/guide/security/scim","matchLevel":1}}},"lastModified":"2026-10-25T10:41:43.837Z","originalFileLocation":"guide/security/scim.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect your identity provider to CloudThinker with SCIM 2.0 so people are added, suspended, and removed as your directory changes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"CloudThinker\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"SCIM Provisioning - CloudThinker\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect your identity provider to CloudThinker with SCIM 2.0 so people are added, suspended, and removed as your directory changes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CloudThinker\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cloudthinker.io/guide/security/scim\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cloudthinker.mintlify.app/_mintlify/api/og/v2?division=Identity+and+access\u0026amp;title=SCIM+Provisioning\u0026amp;description=Connect+your+identity+provider+to+CloudThinker+with+SCIM+2.0+so+people+are+added%2C+suspended%2C+and+removed+as+your+directory+changes.\u0026amp;theme=a662466b4ca99701c5f8fbf0\u0026amp;signature=fda798c304a4ceecc94d88d4048c0b0a7c0faf097cfd237da62ba5f229c57d19\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"SCIM Provisioning - CloudThinker\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect your identity provider to CloudThinker with SCIM 2.0 so people are added, suspended, and removed as your directory changes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cloudthinker.mintlify.app/_mintlify/api/og/v2?division=Identity+and+access\u0026amp;title=SCIM+Provisioning\u0026amp;description=Connect+your+identity+provider+to+CloudThinker+with+SCIM+2.0+so+people+are+added%2C+suspended%2C+and+removed+as+your+directory+changes.\u0026amp;theme=a662466b4ca99701c5f8fbf0\u0026amp;signature=fda798c304a4ceecc94d88d4048c0b0a7c0faf097cfd237da62ba5f229c57d19\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/cloudthinker/2UjfrgdSjUW0wAzv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CloudThinker\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0c93c0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cloudthinker.io/guide/security/scim\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guide/security/scim.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.cloudthinker.io/guide/security/scim\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"vi\" href=\"https://docs.cloudthinker.io/vi/guide/security/scim\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://docs.cloudthinker.io/ja/guide/security/scim\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.cloudthinker.io/ko/guide/security/scim\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.cloudthinker.io/guide/security/scim\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cloudthinker.io/#organization\",\"name\":\"CloudThinker\",\"url\":\"https://docs.cloudthinker.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/cloudthinker/-4m9DUjwzDxHfABz/logo/light.svg?fit=max\u0026auto=format\u0026n=-4m9DUjwzDxHfABz\u0026q=85\u0026s=a56a571509d1cd246f5b0e68db015e5f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cloudthinker.io#website\",\"name\":\"CloudThinker\",\"url\":\"https://docs.cloudthinker.io\",\"publisher\":{\"@id\":\"https://docs.cloudthinker.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cloudthinker.io/guide/security/scim#webpage\",\"url\":\"https://docs.cloudthinker.io/guide/security/scim\",\"name\":\"SCIM Provisioning\",\"description\":\"Connect your identity provider to CloudThinker with SCIM 2.0 so people are added, suspended, and removed as your directory changes.\",\"dateModified\":\"2026-10-25T10:41:43.837Z\",\"isPartOf\":{\"@id\":\"https://docs.cloudthinker.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cloudthinker.io/guide/security/scim#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cloudthinker.io/guide/security/scim#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Identity and access\",\"item\":\"https://docs.cloudthinker.io/guide/security/sso\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SCIM Provisioning\",\"item\":\"https://docs.cloudthinker.io/guide/security/scim\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.cloudthinker.io/guide/security/scim#article\",\"headline\":\"SCIM Provisioning\",\"name\":\"SCIM Provisioning\",\"description\":\"Connect your identity provider to CloudThinker with SCIM 2.0 so people are added, suspended, and removed as your directory changes.\",\"url\":\"https://docs.cloudthinker.io/guide/security/scim\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cloudthinker.io/guide/security/scim#webpage\"},\"dateModified\":\"2026-10-25T10:41:43.837Z\",\"publisher\":{\"@id\":\"https://docs.cloudthinker.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cloudthinker.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CloudThinker\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CloudThinker","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Get started","pages":[{"title":"Get started","href":""}]},{"tab":"Products","pages":[{"title":"Products","href":"/guide/incident/overview"}]},{"tab":"Platform","pages":[{"title":"Platform","href":"/guide/connections/overview"}]},{"tab":"Enterprise","groups":[{"group":"Security and trust","pages":[{"title":"Security and Trust","icon":"shield-halved","href":"/guide/security/overview"},{"title":"Data Protection","icon":"user-shield","href":"/guide/security/data-protection"},{"title":"Custom Guardrails","icon":"eye-slash","href":"/guide/security/custom-guardrails"},{"title":"Bring Your Own Key (BYOK)","icon":"key","href":"/guide/byok"}]},{"group":"Identity and access","pages":[{"title":"Set Up Single Sign-On","icon":"key","href":"/guide/security/sso"},{"title":"Set Up SAML SSO","icon":"shield","href":"/guide/security/sso-saml"},{"title":"Set Up OIDC SSO","description":"Connect Google, Microsoft Entra ID, Okta or any OpenID Connect identity provider to CloudThinker with an issuer URL and client ID.","icon":"id-badge","href":"/guide/security/sso-oidc"},{"title":"SCIM Provisioning","icon":"users-gear","href":"/guide/security/scim"},{"title":"Roles and Permissions","description":"Look up what Owner, Admin, Developer, and Viewer can do in your organization and each workspace before you assign a role.","icon":"user-shield","href":"/guide/security/roles"}]},{"group":"Governance","pages":[{"title":"Audit Logs","icon":"clipboard-list","href":"/guide/security/audit-logs"}]}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/guide/api/overview"}]},{"tab":"Resources","pages":[{"title":"Resources","href":"/learn/aio/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"Pricing","href":"https://cloudthinker.io/pricing"}]},{"language":"vi","pages":[{"title":"vi","href":"/vi/guide/security/scim"}]},{"language":"ja","pages":[{"title":"ja","href":"/ja/guide/security/scim"}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/guide/security/scim"}]}]},"title":"SCIM Provisioning - CloudThinker","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":[],"chunks":[]}