SCIM provisioning
This recipe shows how to set up SCIM 2.0 (System for Cross-domain Identity Management, RFC 7644) provisioning in FVI. SCIM enables your identity provider (IdP) to automatically provision, update, and deprovision users and groups in FVI as your workforce changes.
Endpoint
GET /scim/v2/Users
POST /scim/v2/Users
GET /scim/v2/Groups
POST /scim/v2/Groups
FVI exposes the standard SCIM 2.0 endpoints for user and group management, compatible with all major IdPs.
Prerequisites
- A valid
tenantIdand bearer JWT. - The user must have the
tenant_adminrole. - An SCIM bearer token (generated separately via
POST /v1/scim/tokens).
Generate an SCIM token
curl -X POST https://api.falconveritas.com/v1/scim/tokens \
-H "Authorization: Bearer $FVI_JWT" \
-H "X-Tenant-Id: $FVI_TENANT_ID" \
-H "Content-Type: application/json" \
-d '{
"name": "Okta SCIM",
"description": "SCIM token for Okta provisioning",
"expires_at": "2027-08-22T00:00:00Z",
"idempotency_key": "scim-token-fvi-$RANDOM"
}'
Response
{
"id": "scim-token-001",
"name": "Okta SCIM",
"token": "scim_abc123def456ghi789jkl012mno345pqr678stu901",
"base_url": "https://api.falconveritas.com/scim/v2",
"expires_at": "2027-08-22T00:00:00Z",
"warning": "Store the token securely. It will not be shown again."
}
Configure your IdP
In Okta, Entra ID, or Google Workspace, configure the SCIM provisioning with:
- Base URL:
https://api.falconveritas.com/scim/v2 - Bearer token: the token returned above
- Unique identifier field for users:
userName(typically the email) - Push new users: enabled
- Push profile updates: enabled
- Push user deactivation: enabled
- Sync groups: enabled (optional)
SCIM user schema
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "alice@acmebank.com",
"name": {
"givenName": "Alice",
"familyName": "Anderson"
},
"emails": [
{"value": "alice@acmebank.com", "primary": true}
],
"active": true,
"title": "Senior Reconciliation Analyst",
"fviRoles": ["tenant_analyst", "tenant_reviewer"]
}
SCIM group schema
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "recon-analysts",
"members": [
{"value": "user-001", "display": "alice@acmebank.com"},
{"value": "user-002", "display": "bob@acmebank.com"}
],
"fviTenantRole": "tenant_analyst"
}
Provisioning flow
Use cases
- Onboarding — new hires are automatically provisioned in FVI on their first day.
- Offboarding — departing employees lose FVI access automatically when deactivated in the IdP.
- Role changes — title or department changes in the IdP propagate to FVI role assignments.
- Audit readiness — SCIM events create audit trail entries for every provisioning action.
Code samples
TypeScript
import { FVI } from '@falconveritas/sdk';
const fvi = new FVI({
baseUrl: 'https://api.falconveritas.com',
bearer: process.env.FVI_JWT!,
tenantId: process.env.FVI_TENANT_ID!,
});
// Generate SCIM token
const token = await fvi.scim.createToken({
name: 'Okta SCIM',
expiresAt: '2027-08-22T00:00:00Z',
idempotencyKey: `scim-token-fvi-${Date.now()}`,
});
console.log('SCIM token (store securely!):', token.token);
console.log('Base URL:', token.base_url);
Python
from falconveritas import FVI
client = FVI(
bearer=os.environ["FVI_JWT"],
tenant_id=os.environ["FVI_TENANT_ID"],
)
token = client.scim.create_token(
name="Okta SCIM",
expires_at="2027-08-22T00:00:00Z",
idempotency_key=f"scim-token-fvi-{int(time.time())}",
)
print("SCIM token (store securely!):", token.token)
print("Base URL:", token.base_url)
Related articles
Last updated: 2026-08-22 · Page owner: Documentation · Source: src/lib/api/scim.ts.