SCIM 2.0 Provisioning

NodeLoom implements SCIM 2.0 (System for Cross-domain Identity Management) for automated user and group provisioning. SCIM lets your identity provider manage the full lifecycle of NodeLoom accounts, including creation, updates, deactivation, and role assignment.

Overview

SCIM 2.0 is an open standard defined by RFC 7643 (Core Schema) and RFC 7644 (Protocol) for automating the exchange of user identity information between identity domains. When configured, your identity provider pushes user and group changes to NodeLoom in real time.

Identity ProviderCompatibility
OktaFully compatible. Native SCIM 2.0 provisioning app available.
Azure ADFully compatible. Supports Azure AD automatic provisioning with SCIM 2.0.
OneLoginFully compatible. Use the SCIM Provisioner with SAML (SCIM v2.0) connector.
Other SCIM 2.0 providersCompatible via standard SCIM 2.0 endpoints. Any provider that supports RFC 7644 will work.

Prerequisites

Before configuring SCIM provisioning, ensure the following requirements are met:

RequirementDetails
PlanSCIM provisioning is available on Business and Enterprise plans.
RoleYou must have the Admin role in your NodeLoom team to configure SCIM.
Identity ProviderA compatible identity provider with SCIM 2.0 provisioning support (Okta, Azure AD, OneLogin, or any RFC 7644-compliant provider).

SSO recommended

While SCIM can be configured independently, it is strongly recommended to configure SSO first. This ensures that provisioned users can authenticate seamlessly through your identity provider.

Setting Up SCIM

Follow these steps to enable SCIM provisioning for your team.

1

Generate a SCIM token in NodeLoom

Navigate to Settings → SCIM and click Generate Token. Copy the token immediately as it is only displayed once.

Token shown only once

The SCIM bearer token is displayed only at the time of creation. It is stored as a SHA-256 hash and cannot be retrieved later. If you lose the token, you must revoke it and generate a new one.
2

Configure the SCIM app in your identity provider

Create a SCIM provisioning application in your IdP and enter the following values:

FieldValue
Base URL (SCIM Connector URL)https://your-domain.com/api/scim/v2
AuthenticationHTTP Header: Bearer token (use the token from step 1)
Content-Typeapplication/scim+json
3

Test the connection

Most identity providers include a Test Connection button. Click it to verify that the IdP can reach the NodeLoom SCIM endpoints. A successful test confirms that the base URL and token are correctly configured.

Token Management

SCIM tokens authenticate your identity provider's requests to NodeLoom. Each team can have up to 10 active SCIM tokens, allowing for token rotation without downtime.

FeatureDetails
Maximum tokens10 active tokens per team. Revoke unused tokens to free slots.
Token storageTokens are stored as SHA-256 hashes. The plaintext value is shown only once at creation time.
IP allowlistingRestrict token usage to specific IP addresses or CIDR ranges (/24 to /32). Requests from non-allowed IPs are rejected with 403.
Revoking tokensRevoked tokens are immediately invalidated. Your IdP will receive 401 errors until a new token is configured.
Creating a SCIM token with IP allowlist
{
  "name": "Okta SCIM Provisioning",
  "allowedIPs": [
    "52.18.0.0/24",
    "54.76.120.0/24"
  ],
  "expiresAt": "2027-01-01T00:00:00Z"
}

IP allowlisting for production

In production environments, always configure IP allowlisting to restrict SCIM token usage to your IdP's known egress IP addresses. Check your IdP's documentation for their outbound IP ranges.

User Provisioning

When your identity provider creates a user through SCIM, NodeLoom automatically provisions a new account. SCIM-managed users are distinguished from manually created users and have specific behaviors.

BehaviorDetails
Account creationUsers created via SCIM are automatically email-verified with a random secure password. They should authenticate via SSO.
Synced attributesemail, firstName, lastName, displayName, and active status are synced from the IdP on every SCIM update.
DeactivationSetting a user's active status to false disables their account. They cannot log in but their data is preserved.
DeletionDELETE requests permanently remove the user account and unassign them from all workflows and teams.
Read-only profilesSCIM-provisioned users cannot edit their name or email in the NodeLoom UI. Changes must be made in the IdP.

Profile edit protection

SCIM-provisioned users see a badge on their profile page indicating that their account is managed by an external identity provider. The name and email fields are locked and display a message directing them to contact their IT administrator for changes.
SCIM user creation request
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "userName": "[email protected]",
  "name": {
    "givenName": "Jane",
    "familyName": "Doe"
  },
  "emails": [
    {
      "primary": true,
      "value": "[email protected]",
      "type": "work"
    }
  ],
  "displayName": "Jane Doe",
  "active": true
}

Group Provisioning

SCIM groups from your identity provider map to NodeLoom roles. When a user is added to or removed from a group in your IdP, their NodeLoom role is automatically updated.

IdP Group NameNodeLoom RoleDescription
AdminsADMINFull workspace access including user management, billing, and security settings.
BuildersBUILDERCan create, edit, and delete workflows and manage credentials.
OperatorsOPERATORCan execute workflows and view execution history.
ViewersVIEWERRead-only access to workflows, executions, and dashboards.

Group names are matched case-insensitively. You can customize the group-to-role mapping in Settings → SCIM → Group Mapping. Users who belong to multiple groups receive the highest-privilege role.

SCIM group PATCH (add member)
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [
    {
      "op": "add",
      "path": "members",
      "value": [
        {
          "value": "user-uuid-here",
          "display": "[email protected]"
        }
      ]
    }
  ]
}

Supported Operations

NodeLoom implements the full SCIM 2.0 protocol as defined in RFC 7644. The following table lists all supported operations by resource type.

ResourceOperationMethodDescription
UsersListGET /UsersList all SCIM-provisioned users with pagination and filtering.
UsersCreatePOST /UsersProvision a new user account.
UsersReadGET /Users/{id}Retrieve a specific user by their SCIM ID.
UsersReplacePUT /Users/{id}Full replacement of a user resource.
UsersUpdatePATCH /Users/{id}Partial update of specific user attributes.
UsersDeleteDELETE /Users/{id}Permanently remove a user account.
GroupsListGET /GroupsList all SCIM groups with pagination and filtering.
GroupsCreatePOST /GroupsCreate a new group with role mapping.
GroupsReadGET /Groups/{id}Retrieve a specific group by its SCIM ID.
GroupsReplacePUT /Groups/{id}Full replacement of a group resource.
GroupsUpdatePATCH /Groups/{id}Partial update (add/remove members, rename).
GroupsDeleteDELETE /Groups/{id}Remove a group and its role mappings.
DiscoveryServiceProviderConfigGET /ServiceProviderConfigReturns supported SCIM features and capabilities.
DiscoverySchemasGET /SchemasReturns the SCIM schemas supported by NodeLoom.
DiscoveryResourceTypesGET /ResourceTypesReturns the resource types (User, Group) and their endpoints.

Rate Limiting

SCIM endpoints are rate-limited to prevent abuse and ensure consistent performance. Rate limits apply per team and are tracked using a sliding window.

HeaderDescription
X-RateLimit-LimitMaximum number of requests allowed per window (default: 60).
X-RateLimit-RemainingNumber of requests remaining in the current window.
X-RateLimit-ResetUnix timestamp when the rate limit window resets.

The default rate limit is 60 requests per minute per team. Enterprise customers can request higher limits through their account manager. When the rate limit is exceeded, the API returns a 429 Too Many Requests response with a Retry-After header.

Rate limit exceeded response
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
  "status": "429",
  "detail": "Rate limit exceeded. Retry after 32 seconds."
}

Filtering

SCIM list endpoints support filtering using the standard SCIM filter syntax. Filters are passed as a filter query parameter.

OperatorDescriptionExample
eqEqualuserName eq "[email protected]"
neNot equalactive ne false
coContainsdisplayName co "Jane"
swStarts withuserName sw "jane"
ewEnds withuserName ew "@example.com"
prPresent (has value)displayName pr
Example: filter users by email
curl -H "Authorization: Bearer scim_token_here" \
  "https://your-domain.com/api/scim/v2/Users?filter=userName%20eq%20%22jane%40example.com%22"

API Endpoints

All SCIM endpoints are authenticated with a SCIM bearer token and prefixed with /api/scim/v2. Requests must include the Authorization: Bearer header.

User Endpoints

GET
/api/scim/v2/Users

List all SCIM-provisioned users. Supports pagination (startIndex, count) and filtering.

POST
/api/scim/v2/Users

Create a new user. The user is auto-verified and assigned the default role unless a group mapping applies.

GET
/api/scim/v2/Users/{id}

Retrieve a specific user by their SCIM resource ID.

PATCH
/api/scim/v2/Users/{id}

Partially update a user. Commonly used for activating/deactivating accounts or updating attributes.

DELETE
/api/scim/v2/Users/{id}

Permanently delete a user account and remove all team and workflow associations.

Group Endpoints

GET
/api/scim/v2/Groups

List all SCIM groups. Supports pagination and filtering.

POST
/api/scim/v2/Groups

Create a new group with a display name and optional member list. Maps to a NodeLoom role.

PATCH
/api/scim/v2/Groups/{id}

Update a group. Commonly used for adding or removing members via PatchOp operations.

DELETE
/api/scim/v2/Groups/{id}

Delete a group and remove its role mapping. Members are not deleted but lose their group-assigned role.

Audit Logging

All SCIM operations are recorded in the NodeLoom audit log. Each entry includes the operation type, affected resource, requesting IP address, and the SCIM token used. Audit entries are immutable and tamper-evident.

EventDescription
scim.user.createdA new user account was provisioned via SCIM.
scim.user.updatedA user's attributes were updated via SCIM.
scim.user.deactivatedA user's account was deactivated (active set to false).
scim.user.deletedA user account was permanently deleted via SCIM.
scim.group.createdA new group was created via SCIM.
scim.group.members_updatedMembers were added to or removed from a group.
scim.group.deletedA group was deleted via SCIM.
scim.token.createdA new SCIM bearer token was generated.
scim.token.revokedA SCIM bearer token was revoked.
Example audit log entry
{
  "id": "audit_3a2b1c0d",
  "timestamp": "2026-03-15T09:22:00Z",
  "event": "scim.user.created",
  "actor": "scim-token:okta-provisioner",
  "resource": {
    "type": "user",
    "id": "usr_abc123",
    "email": "[email protected]"
  },
  "sourceIP": "52.18.44.100",
  "teamId": "team_xyz789"
}