Stitchflow
Sprinklr logo

Sprinklr User Management API Guide

API workflow

How to automate user lifecycle operations through APIs with caveats that matter in production.

UpdatedMar 16, 2026

Summary and recommendation

Sprinklr's REST API (base: `https://api.sprinklr.com/api/v2`) supports full user lifecycle management via OAuth 2.0 Bearer tokens obtained through the client_credentials or authorization code flow.

Core user operations - list, get, create, update, deactivate, delete - are available under `/users`, with role lookups at `/roles`.

SCIM 2.0 is available at `https://api.sprinklr.com/scim/v2` for Enterprise plans with active SSO.

The API is suitable for building identity graph integrations that keep Sprinklr user state synchronized with a canonical directory source, but several sharp edges require explicit handling before any automation is production-ready.

Key scopes required: `user.read` for GET operations, `user.write` for mutations, and `role.read` to resolve roleIds before provisioning.

Tokens expire in 24 hours by default - implement refresh or re-issuance logic before expiry.

Rate limits are not publicly enumerated;

HTTP 429 is returned on breach, but documented Retry-After header behavior is unconfirmed by official docs.

API quick reference

Has user APIYes
Auth methodOAuth 2.0 (client credentials and authorization code flows)
Base URLOfficial docs
SCIM availableYes
SCIM plan requiredEnterprise

Authentication

Auth method: OAuth 2.0 (client credentials and authorization code flows)

Setup steps

  1. Log in to the Sprinklr platform as an Admin and navigate to Settings > API Management.
  2. Create an API App to obtain a Client ID and Client Secret.
  3. Request an access token via POST to https://api.sprinklr.com/oauth/token using client_credentials grant type.
  4. Include the returned Bearer token in the Authorization header for all subsequent API requests.
  5. Tokens expire; implement refresh logic using the refresh_token if using authorization code flow.

Required scopes

Scope Description Required for
user.read Read user profiles and list users within the environment. GET /users, GET /users/{id}
user.write Create, update, and deactivate user accounts. POST /users, PUT /users/{id}, DELETE /users/{id}
role.read Read available roles and role assignments. GET /roles, GET /users/{id}/roles

User object / data model

Field Type Description On create On update Notes
id string Unique Sprinklr user identifier. system-generated immutable Used as path parameter in user-specific endpoints.
username string Unique login username for the user. required optional Typically matches corporate email.
email string Primary email address of the user. required optional
firstName string User's first name. required optional
lastName string User's last name. required optional
status enum Account status: ENABLED or DISABLED. optional (defaults to ENABLED) optional Set to DISABLED to deactivate without deleting.
roleIds array List of role IDs assigned to the user. required optional At least one role must be assigned.
partnerUserId string External identifier for the user from an IdP or partner system. optional optional Used for SCIM and SSO correlation.
timeZone string User's preferred time zone (IANA format). optional optional
locale string User's locale/language preference (e.g., en_US). optional optional
profileImage string (URL) URL of the user's profile image. optional optional
createdTime long (epoch ms) Timestamp when the user was created. system-generated immutable
modifiedTime long (epoch ms) Timestamp of last modification. system-generated system-generated

Core endpoints

List Users

  • Method: GET
  • URL: https://api.sprinklr.com/api/v2/users
  • Watch out for: page is zero-indexed. Omitting pageSize defaults to 50.

Request example

GET /api/v2/users?page=0&pageSize=50
Authorization: Bearer {access_token}

Response example

{
  "data": [
    {"id":"u_123","username":"jdoe@acme.com","status":"ENABLED"}
  ],
  "totalCount": 1
}

Get User by ID

  • Method: GET
  • URL: https://api.sprinklr.com/api/v2/users/{userId}
  • Watch out for: Returns 404 if user does not exist in the authenticated environment.

Request example

GET /api/v2/users/u_123
Authorization: Bearer {access_token}

Response example

{
  "id": "u_123",
  "username": "jdoe@acme.com",
  "email": "jdoe@acme.com",
  "status": "ENABLED",
  "roleIds": ["role_456"]
}

Create User

  • Method: POST
  • URL: https://api.sprinklr.com/api/v2/users
  • Watch out for: username must be unique across the environment. Duplicate usernames return a 409 conflict.

Request example

POST /api/v2/users
Authorization: Bearer {access_token}
Content-Type: application/json

{"username":"jdoe@acme.com","email":"jdoe@acme.com","firstName":"Jane","lastName":"Doe","roleIds":["role_456"]}

Response example

{
  "id": "u_789",
  "username": "jdoe@acme.com",
  "status": "ENABLED"
}

Update User

  • Method: PUT
  • URL: https://api.sprinklr.com/api/v2/users/{userId}
  • Watch out for: PUT replaces the full user object; omitting optional fields may reset them. Use carefully.

Request example

PUT /api/v2/users/u_789
Authorization: Bearer {access_token}
Content-Type: application/json

{"firstName":"Jane","lastName":"Smith","roleIds":["role_456","role_789"]}

Response example

{
  "id": "u_789",
  "firstName": "Jane",
  "lastName": "Smith",
  "status": "ENABLED"
}

Deactivate User

  • Method: PUT
  • URL: https://api.sprinklr.com/api/v2/users/{userId}
  • Watch out for: Sprinklr does not expose a dedicated PATCH or deactivate endpoint; status change is done via PUT.

Request example

PUT /api/v2/users/u_789
Authorization: Bearer {access_token}
Content-Type: application/json

{"status":"DISABLED"}

Response example

{
  "id": "u_789",
  "status": "DISABLED"
}

Delete User

  • Method: DELETE
  • URL: https://api.sprinklr.com/api/v2/users/{userId}
  • Watch out for: Deletion is permanent. Prefer setting status=DISABLED for reversible deactivation.

Request example

DELETE /api/v2/users/u_789
Authorization: Bearer {access_token}

Response example

HTTP 204 No Content

List Roles

  • Method: GET
  • URL: https://api.sprinklr.com/api/v2/roles
  • Watch out for: Role IDs are environment-specific; do not reuse IDs across different Sprinklr environments.

Request example

GET /api/v2/roles
Authorization: Bearer {access_token}

Response example

{
  "data": [
    {"id":"role_456","name":"Community Manager"},
    {"id":"role_789","name":"Admin"}
  ]
}

Get Token (OAuth 2.0)

  • Method: POST
  • URL: https://api.sprinklr.com/oauth/token
  • Watch out for: Tokens expire in 24 hours by default. Implement token refresh or re-issuance before expiry.

Request example

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=CLIENT_ID&client_secret=CLIENT_SECRET

Response example

{
  "access_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 86400
}

Rate limits, pagination, and events

  • Rate limits: Sprinklr enforces per-app rate limits on API calls. Specific numeric limits are not publicly documented in detail; limits vary by plan and API app configuration.
  • Rate-limit headers: Unknown
  • Retry-After header: Unknown
  • Rate-limit notes: Official docs do not explicitly document rate-limit response headers or Retry-After behavior. Contact Sprinklr support for app-specific limits.
  • Pagination method: offset
  • Default page size: 50
  • Max page size: 100
  • Pagination pointer: page / pageSize
Plan Limit Concurrent
Enterprise Not publicly specified; configured per API app by Sprinklr support 0
  • Webhooks available: No
  • Webhook notes: Sprinklr's public developer documentation does not describe user-management-specific webhook events. Webhooks are available for social listening and engagement events, not user lifecycle events.
  • Alternative event strategy: Poll GET /users with a timestamp filter or use SCIM provisioning events via your IdP (Okta, Entra ID) for user lifecycle notifications.

SCIM API status

  • SCIM available: Yes

  • SCIM version: 2.0

  • Plan required: Enterprise

  • Endpoint: https://api.sprinklr.com/scim/v2

  • Supported operations: GET /Users, GET /Users/{id}, POST /Users, PUT /Users/{id}, PATCH /Users/{id}, DELETE /Users/{id}, GET /Groups, POST /Groups, PATCH /Groups/{id}

Limitations:

  • SSO must be configured and active before SCIM provisioning can be enabled.
  • SCIM is only available on the Enterprise plan.
  • SCIM endpoint URL and Bearer token are generated within Sprinklr's SSO/SCIM settings and must be copied into the IdP (Okta or Entra ID).
  • Group push maps to Sprinklr user groups, not roles; role assignment still requires manual configuration or API.
  • Google Workspace and OneLogin are not listed as supported IdPs for SCIM in official docs.

Common scenarios

Three primary automation scenarios are well-supported by the API:

Provisioning via REST: Fetch roleIds from GET /api/v2/roles first - they are environment-scoped and not portable.

Then POST /api/v2/users with username, email, firstName, lastName, and roleIds.

The username field must be unique;

a duplicate returns HTTP 409.

Check existence with GET /users?username= before creating to avoid collision errors in idempotent pipelines.

Deprovisioning via REST: Retrieve the user's id via GET /api/v2/users filtered by email or username, then issue PUT /api/v2/users/{userId} with {"status":"DISABLED"}.

This preserves audit history and is reversible.

DELETE /api/v2/users/{userId} is permanent - prefer DISABLED for any environment with compliance or audit requirements.

SCIM auto-provisioning with Okta or Entra ID: SSO (SAML) must be fully active before SCIM can be enabled.

Generate the SCIM Base URL and Bearer token from Settings → Security → SCIM Provisioning, then configure the IdP connector.

Note that group push maps to Sprinklr user groups, not permission roles - role assignment remains a separate step outside the SCIM sync loop.

Google Workspace and OneLogin are not listed as supported IdPs in official documentation.

Provision a new employee via REST API

  1. Obtain OAuth 2.0 access token via POST /oauth/token with client_credentials.
  2. Retrieve available role IDs via GET /api/v2/roles to identify the correct roleId for the new user.
  3. POST /api/v2/users with required fields: username, email, firstName, lastName, roleIds.
  4. Store the returned id for future updates or deactivation.

Watch out for: username must be unique; if the user already exists (e.g., from a previous import), the API returns 409. Check existence with GET /users?username= before creating.

Deprovision a departing employee

  1. Obtain a fresh access token if the current one is near expiry.
  2. Look up the user's Sprinklr id via GET /api/v2/users filtering by username or email.
  3. Set status to DISABLED via PUT /api/v2/users/{userId} with {"status":"DISABLED"} to revoke access while preserving audit history.
  4. Optionally call DELETE /api/v2/users/{userId} for full removal if data retention is not required.

Watch out for: Deletion is irreversible. Prefer DISABLED status for compliance and audit trail preservation.

Set up SCIM auto-provisioning with Okta

  1. Confirm Enterprise plan is active and SSO (SAML) is fully configured in Sprinklr Settings > Security.
  2. In Sprinklr, navigate to Settings > Security > SCIM Provisioning and enable SCIM to generate the SCIM Base URL and Bearer token.
  3. In Okta, add the Sprinklr app from the Okta Integration Network and navigate to the Provisioning tab.
  4. Enter the Sprinklr SCIM Base URL and Bearer token into Okta's SCIM connector settings.
  5. Enable the desired provisioning features: Create Users, Update User Attributes, Deactivate Users.
  6. Assign users or groups in Okta to trigger initial provisioning sync.

Watch out for: SCIM will not activate if SSO is not already live. Group push maps to Sprinklr user groups, not permission roles - role assignment must be handled separately.

Why building this yourself is a trap

The most consequential API caveat is that PUT /users/{userId} replaces the full user object - omitting any optional field may silently reset it. Always fetch the current object before issuing a PUT to avoid unintended data loss.

A second structural trap: user IDs are environment-scoped, so the same individual will have different id values across Sprinklr environments; any identity graph integration must store and resolve IDs per environment, not globally.

Role IDs share the same constraint - they cannot be reused across environments and must be retrieved fresh from each target before provisioning. Finally, the developer portal and help center are separate properties with overlapping but non-identical documentation;

some endpoint details and schema fields appear in only one of the two, making complete API coverage dependent on consulting both sources.

Automate Sprinklr workflows without one-off scripts

Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.

Every app coverage, including apps without APIs
60+ app integrations plus browser automation for apps without APIs
IT graph reconciliation across apps and your IdP
Less than a week to launch, maintained as APIs and admin consoles change
SOC 2 Type II. ~2 hours of your team's time

UpdatedMar 16, 2026

* Details sourced from official product documentation and admin references.

Keep exploring

Related apps

15Five logo

15Five

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

15Five uses a fixed role-based permission model with six predefined roles: Account Admin, HR Admin, Billing Admin, Group Admin, Manager, and Employee. No custom roles can be constructed. User management lives at Settings gear → People → Manage people p

1Password logo

1Password

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

1Password's admin console at my.1password.com covers the full user lifecycle — invitations, group assignments, vault access, suspension, and deletion — without any third-party tooling. Like every app that mixes role-based and resource-level permissions

8x8 logo

8x8

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

8x8 Admin Console supports full lifecycle user management — create, deactivate, and delete — across its X Series unified communications platform. Every app a user can access (8x8 Work desktop, mobile, web, Agent Workspace) is gated by license assignmen