Stitchflow
SugarCRM logo

SugarCRM 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

SugarCRM exposes a REST API at `https://{your-instance}.sugarcrm.com/rest/v11_1` using OAuth 2.0 (password or client credentials grant).

Admin-scoped tokens are required to read or modify other users' records;

non-admin tokens are ACL-restricted to the authenticated user's own record.

The API version is instance-specific - v11_1 targets Sugar 13.x, but older instances may only support v10 or v11.

Always verify against `/rest/v11_1/metadata` before assuming endpoint availability.

For identity graph construction, the `reports_to_id` field on the user object provides the manager relationship chain, and `department`, `title`, and team membership data can be joined to build a full org-context graph across the CRM's user population.

API quick reference

Has user APIYes
Auth methodOAuth 2.0 (password credentials grant or client credentials grant via SugarCRM's built-in OAuth 2.0 server)
Base URLOfficial docs
SCIM availableYes
SCIM plan requiredEnterprise (requires SugarIdentity, available on Advanced and Premier cloud plans; SSO must be enabled as a prerequisite)

Authentication

Auth method: OAuth 2.0 (password credentials grant or client credentials grant via SugarCRM's built-in OAuth 2.0 server)

Setup steps

  1. In SugarCRM Admin, navigate to Admin > OAuth Keys and create an OAuth 2.0 consumer key and secret.
  2. POST to /rest/v11_1/oauth2/token with grant_type=password, client_id, client_secret, username, and password to obtain an access_token and refresh_token.
  3. Include the access_token in the OAuth-Token header on all subsequent API requests.
  4. Use /rest/v11_1/oauth2/token with grant_type=refresh_token to refresh an expired access token.
  5. For platform integrations, pass platform=base (or a custom platform key) in the token request to avoid session conflicts.

User object / data model

Field Type Description On create On update Notes
id string (GUID) Unique record identifier auto-generated read-only UUID format
user_name string Login username required optional Must be unique across the instance
first_name string User's first name optional optional
last_name string User's last name required optional
full_name string Computed full name read-only read-only Derived from first_name + last_name
email array Email address(es); primary flagged with primary_address:true optional optional Passed as array of email objects
status enum Active, Inactive, or Deleted optional (defaults to Active) optional Setting to Inactive disables login
is_admin bool Whether user has administrator privileges optional optional Requires admin token to set true
title string Job title optional optional
department string Department name optional optional
phone_work string Work phone number optional optional
phone_mobile string Mobile phone number optional optional
reports_to_id string (GUID) ID of the user this user reports to optional optional
locale string User locale/language preference optional optional e.g. en_us
timezone string User's timezone optional optional e.g. America/New_York
date_entered datetime Record creation timestamp auto-generated read-only ISO 8601
date_modified datetime Last modification timestamp auto-generated auto-updated ISO 8601
created_by string (GUID) ID of user who created the record auto-set read-only
modified_user_id string (GUID) ID of user who last modified the record auto-set auto-set
deleted bool Soft-delete flag defaults to false set via DELETE endpoint SugarCRM uses soft deletes; deleted=1 hides record

Core endpoints

List Users

  • Method: GET
  • URL: /rest/v11_1/Users
  • Watch out for: Deleted users (deleted=1) are excluded by default. Use show_deleted=1 query param to include them.

Request example

GET /rest/v11_1/Users?max_num=20&offset=0&fields=id,user_name,first_name,last_name,status
OAuth-Token: {access_token}

Response example

{
  "next_offset": 20,
  "records": [
    {"id":"abc-123","user_name":"jdoe","first_name":"John","last_name":"Doe","status":"Active"}
  ]
}

Get User by ID

  • Method: GET
  • URL: /rest/v11_1/Users/{id}
  • Watch out for: Use /rest/v11_1/me to retrieve the currently authenticated user without knowing their ID.

Request example

GET /rest/v11_1/Users/abc-123?fields=id,user_name,email,status
OAuth-Token: {access_token}

Response example

{
  "id": "abc-123",
  "user_name": "jdoe",
  "status": "Active",
  "email": [{"email_address":"jdoe@example.com","primary_address":true}]
}

Create User

  • Method: POST
  • URL: /rest/v11_1/Users
  • Watch out for: Password cannot be set via the REST API for SugarIdentity-managed cloud instances; user credentials are managed through SugarIdentity/IdP instead.

Request example

POST /rest/v11_1/Users
OAuth-Token: {access_token}
{
  "user_name": "jsmith",
  "last_name": "Smith",
  "first_name": "Jane",
  "status": "Active"
}

Response example

{
  "id": "def-456",
  "user_name": "jsmith",
  "first_name": "Jane",
  "last_name": "Smith",
  "status": "Active"
}

Update User

  • Method: PUT
  • URL: /rest/v11_1/Users/{id}
  • Watch out for: Only an admin-level token can modify is_admin or status fields. Non-admin tokens can update their own record via /rest/v11_1/me.

Request example

PUT /rest/v11_1/Users/def-456
OAuth-Token: {access_token}
{
  "title": "Sales Manager",
  "department": "Sales"
}

Response example

{
  "id": "def-456",
  "title": "Sales Manager",
  "department": "Sales"
}

Deactivate / Soft-Delete User

  • Method: DELETE
  • URL: /rest/v11_1/Users/{id}
  • Watch out for: This sets deleted=1 (soft delete). The user record is retained in the database. For SugarIdentity instances, deprovisioning should be done via SCIM or the IdP to fully revoke access.

Request example

DELETE /rest/v11_1/Users/def-456
OAuth-Token: {access_token}

Response example

{
  "id": "def-456"
}

Search / Filter Users

  • Method: GET
  • URL: /rest/v11_1/Users?filter[0][user_name]={value}
  • Watch out for: Filter syntax uses bracket notation. Complex filters can also be sent via POST to /rest/v11_1/Users/filter with a JSON body.

Request example

GET /rest/v11_1/Users?filter[0][user_name]=jdoe&fields=id,user_name,status
OAuth-Token: {access_token}

Response example

{
  "next_offset": -1,
  "records": [
    {"id":"abc-123","user_name":"jdoe","status":"Active"}
  ]
}

Get Current Authenticated User

  • Method: GET
  • URL: /rest/v11_1/me
  • Watch out for: Returns the user associated with the current OAuth token. Useful for verifying token identity without a known user ID.

Request example

GET /rest/v11_1/me
OAuth-Token: {access_token}

Response example

{
  "current_user": {
    "id": "abc-123",
    "user_name": "jdoe",
    "is_admin": false
  }
}

Revoke OAuth Token (Logout)

  • Method: POST
  • URL: /rest/v11_1/oauth2/logout
  • Watch out for: Invalidates the current access token server-side. Should be called when deprovisioning integrations to prevent orphaned sessions.

Request example

POST /rest/v11_1/oauth2/logout
OAuth-Token: {access_token}

Response example

{
  "success": true
}

Rate limits, pagination, and events

  • Rate limits: SugarCRM does not publicly document specific rate limit thresholds in its REST API developer docs. Cloud instances may enforce limits at the infrastructure level; on-premise limits depend on server configuration.

  • Rate-limit headers: No

  • Retry-After header: No

  • Rate-limit notes: No official per-plan rate limit figures are published. Contact SugarCRM support for cloud instance limits.

  • Pagination method: offset

  • Default page size: 20

  • Max page size: 1000

  • Pagination pointer: offset and max_num

  • Webhooks available: Yes

  • Webhook notes: SugarCRM supports outbound webhooks via its 'Process Audit' and 'Sugar Process' (SugarBPM) module, as well as a dedicated Webhook module in Sugar 11+. Webhooks can be configured to fire on record create, update, or delete events for the Users module.

  • Alternative event strategy: For real-time sync, SugarCRM also supports Logic Hooks (server-side PHP hooks) for on-premise deployments. Cloud instances use the Webhook module or SugarBPM triggers.

  • Webhook events: after_save (User created or updated), after_delete (User soft-deleted)

SCIM API status

  • SCIM available: Yes

  • SCIM version: 2.0

  • Plan required: Enterprise (requires SugarIdentity, available on Advanced and Premier cloud plans; SSO must be enabled as a prerequisite)

  • Endpoint: https://id.sugarcrm.com/scim/v2 (SugarIdentity-managed endpoint; exact tenant URL provided during SugarIdentity setup)

  • Supported operations: GET /Users (list users), GET /Users/{id} (get user), POST /Users (create user), PUT /Users/{id} (replace user), PATCH /Users/{id} (update user), DELETE /Users/{id} (deactivate user), GET /Groups (list groups/roles), GET /ServiceProviderConfig, GET /Schemas

Limitations:

  • SCIM is only available on SugarIdentity-enabled cloud instances (not on-premise Sugar deployments).
  • SSO must be configured as a prerequisite before SCIM provisioning can be enabled.
  • SCIM endpoint URL is tenant-specific and provided by SugarCRM during SugarIdentity onboarding; it is not a generic public endpoint.
  • Supported IdPs with documented SCIM connectors include Okta, Microsoft Entra ID (Azure AD), and OneLogin.
  • Google Workspace SCIM provisioning is not officially documented as supported.
  • Password sync is not supported via SCIM; authentication is handled by the IdP.

Common scenarios

Three scenarios cover the majority of programmatic user lifecycle needs.

First, provisioning on non-SugarIdentity instances: POST to /rest/v11_1/Users with user_name, last_name, status=Active, and optional profile fields;

store the returned GUID;

assign roles via /rest/v11_1/Users/{id}/link/roles.

Note that password cannot be set via the REST API even on non-SugarIdentity instances - it must be handled through the Admin UI or a direct database operation.

Second, deprovisioning on SugarIdentity/Enterprise cloud: always initiate from the IdP side (Okta, Entra ID, or OneLogin);

the IdP sends a SCIM PATCH or DELETE to the SugarIdentity endpoint, which propagates status=Inactive to the CRM.

Calling DELETE /rest/v11_1/Users/{id} directly sets deleted=1 but does not revoke the user's IdP session or SugarIdentity credentials.

Third, bulk audit: paginate GET /rest/v11_1/Users using offset and max_num (cap at 1000);

iterate until next_offset returns -1;

filter by status=Active and sort by date_modified to surface stale accounts.

Provision a new user via REST API (non-SugarIdentity instance)

  1. POST to /rest/v11_1/oauth2/token with admin credentials to obtain an admin access_token.
  2. POST to /rest/v11_1/Users with required fields: user_name, last_name, status=Active, and optionally email, title, department.
  3. Store the returned id (GUID) for future update or deactivation operations.
  4. Optionally assign roles by POSTing to /rest/v11_1/Users/{id}/link/roles with the role record ID.

Watch out for: Password must be set separately via the Sugar admin UI or a direct database operation on non-SugarIdentity instances; the REST API does not expose a password field for security reasons.

Deprovision a user via SCIM (SugarIdentity / Enterprise cloud)

  1. Ensure SugarIdentity is enabled and SCIM is configured in your IdP (Okta, Entra ID, or OneLogin).
  2. In the IdP, unassign the SugarCRM application from the user or deactivate the user in the IdP directory.
  3. The IdP sends a SCIM PATCH or DELETE request to the SugarIdentity SCIM endpoint to set the user's active attribute to false.
  4. SugarIdentity propagates the deactivation to the SugarCRM instance, setting user status to Inactive and revoking SSO access.
  5. Verify deactivation by calling GET /rest/v11_1/Users/{id} and confirming status=Inactive.

Watch out for: Deprovisioning via the SugarCRM REST API alone (DELETE /Users/{id}) does not revoke the user's IdP session or SugarIdentity credentials. Always deprovision from the IdP side when SugarIdentity is in use.

Bulk-read and audit all active users

  1. Authenticate via POST /rest/v11_1/oauth2/token to get an admin access_token.
  2. GET /rest/v11_1/Users?fields=id,user_name,first_name,last_name,status,email,date_modified&max_num=100&offset=0&filter[0][status]=Active
  3. Check the next_offset value in the response; if next_offset != -1, repeat the request incrementing offset by max_num until next_offset returns -1.
  4. Aggregate all records across pages for the full active user list.

Watch out for: Setting max_num above 1000 is not supported and may be silently capped. For very large instances, paginate carefully and avoid parallel requests that could trigger infrastructure-level throttling.

Why building this yourself is a trap

Several non-obvious constraints create integration risk. Bulk/batch operations are not natively supported - mass updates require individual PUT/PATCH calls per record, which is a throughput concern on large instances. OAuth tokens expire after 3600 seconds;

refresh tokens are also finite, so integrations must handle proactive refresh or face silent auth failures. The platform parameter in the token request matters: reusing platform=base on a cloud instance can conflict with active user sessions - use a unique custom platform key for integrations. Soft deletes (deleted=1) do not immediately terminate active sessions;

on SugarIdentity instances, only IdP-side deprovisioning fully revokes access. Rate limits are not publicly documented for cloud instances and must be confirmed with SugarCRM support, making capacity planning for high-volume sync jobs speculative.

Finally, custom fields added via Studio are accessible via the API but must be explicitly requested using the fields parameter - they are not returned by default, which can cause silent data gaps in identity graph pipelines that rely on enriched user attributes.

Automate SugarCRM 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