Stitchflow
Keeper logo

Keeper User Management API Guide

API workflow

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

UpdatedMar 11, 2026

Summary and recommendation

Keeper's SCIM 2.0 endpoint is available exclusively on the Enterprise plan and requires Keeper SSO Connect to be fully configured before provisioning will function. The base URL is non-standard: https://keepersecurity.com/api/rest/scim/v2/{node_id}, where node_id is an enterprise-specific path segment retrieved from Admin Console → Admin → Provisioning. Multi-node enterprises require a separate SCIM Bearer Token per node.

Tokens are shown only once at generation; a lost token requires regeneration and full IdP reconfiguration. Keeper does not publish numeric rate limits for SCIM endpoints; the recommendation is to rely on IdP-native throttling from Okta or Azure AD.

Pagination follows SCIM standard parameters (startIndex, count) with a default page size of 100 and a maximum of 1000. Bulk operations (/Bulk) are not supported. For operations outside SCIM scope - role assignment, reporting, and batch lifecycle management - Keeper Commander CLI (pip install keepercommander) uses separate device-level authentication and is the primary toolchain.

API quick reference

Has user APIYes
Auth methodBearer token (SCIM provisioning token generated in Admin Console). Keeper Commander CLI uses device-level authentication with master password or SSO session.
Base URLOfficial docs
SCIM availableYes
SCIM plan requiredEnterprise

Authentication

Auth method: Bearer token (SCIM provisioning token generated in Admin Console). Keeper Commander CLI uses device-level authentication with master password or SSO session.

Setup steps

  1. Log in to the Keeper Admin Console at https://keepersecurity.com/console.
  2. Navigate to Admin > Provisioning and select or create a SCIM provisioning method.
  3. Generate a SCIM Bearer Token from the provisioning configuration page.
  4. Store the token securely; it is shown only once and used as the Authorization Bearer header for all SCIM requests.
  5. For Commander SDK/CLI: install via pip (pip install keepercommander), configure config.json with Keeper credentials or SSO device token, and authenticate interactively or via environment variables.

Required scopes

Scope Description Required for
SCIM Bearer Token Tenant-scoped provisioning token granting full SCIM read/write access to users and groups within the enterprise node. All SCIM 2.0 user and group provisioning operations

User object / data model

Field Type Description On create On update Notes
id string Keeper-assigned unique identifier for the user. auto-generated immutable Used as the resource identifier in SCIM URL paths.
userName string User email address; serves as the primary login identifier. required supported Must be a valid email address. Changing userName triggers an email change in Keeper.
name.givenName string User first name. optional supported
name.familyName string User last name. optional supported
emails array List of email objects; primary email must match userName. required supported Only the primary email is used by Keeper.
active boolean Whether the user account is active. Setting to false locks the user. optional, defaults to true supported Deactivating does not delete the user or their vault data.
externalId string Identifier from the external IdP (e.g., Okta user ID). optional supported Used for correlation between IdP and Keeper; not exposed in the Keeper UI.
groups array Groups the user belongs to, returned in GET responses. read-only in user resource managed via Group resource Group membership is managed through the /Groups endpoint, not directly on the user object.
phoneNumbers array User phone numbers. optional supported Support varies by IdP mapping configuration.
title string User job title. optional supported

Core endpoints

List Users

  • Method: GET
  • URL: https://keepersecurity.com/api/rest/scim/v2/{node_id}/Users
  • Watch out for: The node_id in the URL path is the Keeper enterprise node ID, not a generic tenant ID. Retrieve it from the Admin Console provisioning settings.

Request example

GET /api/rest/scim/v2/123456/Users?startIndex=1&count=100
Authorization: Bearer <scim_token>

Response example

{"schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],"totalResults":42,"startIndex":1,"itemsPerPage":100,"Resources":[{"id":"uid1","userName":"alice@example.com","active":true}]}

Get User

  • Method: GET
  • URL: https://keepersecurity.com/api/rest/scim/v2/{node_id}/Users/{id}
  • Watch out for: Returns 404 if the user exists in Keeper but was not provisioned through this SCIM node.

Request example

GET /api/rest/scim/v2/123456/Users/uid1
Authorization: Bearer <scim_token>

Response example

{"schemas":["urn:ietf:params:scim:schemas:core:2.0:User"],"id":"uid1","userName":"alice@example.com","name":{"givenName":"Alice","familyName":"Smith"},"active":true}

Create User

  • Method: POST
  • URL: https://keepersecurity.com/api/rest/scim/v2/{node_id}/Users
  • Watch out for: Creating a user sends an invitation email. The user must accept and complete vault setup before SSO login is available.

Request example

{"schemas":["urn:ietf:params:scim:schemas:core:2.0:User"],"userName":"bob@example.com","name":{"givenName":"Bob","familyName":"Jones"},"active":true}

Response example

{"id":"uid2","userName":"bob@example.com","active":true,"meta":{"resourceType":"User","location":"/scim/v2/123456/Users/uid2"}}

Update User partial

  • Method: PATCH
  • URL: https://keepersecurity.com/api/rest/scim/v2/{node_id}/Users/{id}
  • Watch out for: Setting active=false locks the user but does not delete vault data. A separate DELETE is required to fully remove the user.

Request example

{"schemas":["urn:ietf:params:scim:api:messages:2.0:PatchOp"],"Operations":[{"op":"replace","path":"active","value":false}]}

Response example

{"id":"uid2","userName":"bob@example.com","active":false}

Update User full replace

  • Method: PUT
  • URL: https://keepersecurity.com/api/rest/scim/v2/{node_id}/Users/{id}
  • Watch out for: PUT replaces the full user resource. Omitting optional fields may clear them. Prefer PATCH for partial updates.

Request example

{"schemas":["urn:ietf:params:scim:schemas:core:2.0:User"],"userName":"bob@example.com","active":false}

Response example

{"id":"uid2","userName":"bob@example.com","active":false}

Delete User

  • Method: DELETE
  • URL: https://keepersecurity.com/api/rest/scim/v2/{node_id}/Users/{id}
  • Watch out for: Deletion is irreversible. Vault data handling depends on enterprise transfer policy configured in the Admin Console before deletion.

Request example

DELETE /api/rest/scim/v2/123456/Users/uid2
Authorization: Bearer <scim_token>

Response example

HTTP 204 No Content

List Groups

  • Method: GET
  • URL: https://keepersecurity.com/api/rest/scim/v2/{node_id}/Groups
  • Watch out for: Keeper maps SCIM Groups to Keeper Teams, not to Keeper Roles. Role assignment must be done separately in Admin Console or via Commander.

Request example

GET /api/rest/scim/v2/123456/Groups?startIndex=1&count=100
Authorization: Bearer <scim_token>

Response example

{"totalResults":5,"Resources":[{"id":"gid1","displayName":"Engineering","members":[{"value":"uid1"}]}]}

Create Group

  • Method: POST
  • URL: https://keepersecurity.com/api/rest/scim/v2/{node_id}/Groups
  • Watch out for: Group displayName must be unique within the node. Duplicate names return 409 Conflict.

Request example

{"schemas":["urn:ietf:params:scim:schemas:core:2.0:Group"],"displayName":"Finance","members":[{"value":"uid1"}]}

Response example

{"id":"gid2","displayName":"Finance","members":[{"value":"uid1"}]}

Rate limits, pagination, and events

  • Rate limits: Keeper does not publish explicit numeric rate limits in official documentation for SCIM or REST endpoints.
  • Rate-limit headers: No
  • Retry-After header: No
  • Rate-limit notes: No official rate limit figures are published. Keeper recommends using IdP-native throttling (e.g., Okta, Azure AD) to avoid overloading the endpoint.
  • Pagination method: offset
  • Default page size: 100
  • Max page size: 1000
  • Pagination pointer: startIndex and count (SCIM standard parameters)
Plan Limit Concurrent
Enterprise Not publicly documented 0
  • Webhooks available: No
  • Webhook notes: Keeper does not offer outbound webhooks for user lifecycle events in official documentation. Event-driven workflows must be initiated from the IdP side.
  • Alternative event strategy: Use IdP-native event hooks (Okta, Azure AD) to trigger SCIM provisioning actions to Keeper, or use Keeper Commander CLI scripted on a schedule for sync tasks.

SCIM API status

  • SCIM available: Yes

  • SCIM version: 2.0

  • Plan required: Enterprise

  • Endpoint: https://keepersecurity.com/api/rest/scim/v2/{node_id}

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

Limitations:

  • SCIM requires Enterprise plan; not available on Business or Business Starter.
  • SSO (Keeper SSO Connect) must be configured before SCIM provisioning is enabled.
  • The node_id path parameter is specific to the enterprise node; multi-node enterprises require separate SCIM tokens per node.
  • Vault data is not deleted automatically on SCIM DELETE; vault transfer policy must be pre-configured in Admin Console.
  • SCIM Groups map to Keeper Teams, not Keeper Roles; role assignment requires Admin Console or Commander.
  • Bulk operations endpoint is not supported.
  • Password and credential fields are not accessible via SCIM due to zero-knowledge architecture.

Common scenarios

The canonical provisioning flow via Okta requires SSO Connect active, a SCIM Bearer Token scoped to the target node, and the Keeper SCIM app configured in Okta with the node-specific base URL.

A POST /Users from Okta creates the Keeper account and triggers an invitation email; the user must complete vault setup before SSO login is available - this step cannot be skipped even with SSO enforced.

For offboarding, the IdP sends PATCH /Users/{id} with active=false to lock the account; a subsequent DELETE /Users/{id} is required to fully remove the user and free the seat. These are two distinct, non-atomic operations.

Vault data recovery on deletion depends entirely on whether an Account Transfer Policy was pre-configured in Admin Console before the user's initial invite acceptance - there is no API mechanism to retroactively enable this.

SCIM Groups map to Keeper Teams (shared folder access), not to Keeper Roles (admin permissions); role assignment has no SCIM equivalent and must be handled via Admin Console or Commander.

Provision a new employee via Okta SCIM

  1. Ensure Keeper SSO Connect is configured with Okta as the IdP.
  2. In Keeper Admin Console, navigate to Admin > Provisioning > Add Method > SCIM and generate a Bearer Token.
  3. In Okta, configure the Keeper SCIM app with base URL https://keepersecurity.com/api/rest/scim/v2/{node_id} and the Bearer Token.
  4. Assign the new employee to the Keeper app in Okta; Okta sends POST /Users to Keeper SCIM.
  5. Keeper creates the user account and sends an invitation email; user completes vault setup.
  6. Assign the user to an Okta group mapped to a Keeper Team; Okta sends PATCH /Groups to add the member.

Watch out for: The invitation email is always sent even with SSO configured; the user must click it and complete initial vault setup before SSO login is available.

Offboard a departing employee

  1. Pre-configure a vault transfer policy in Keeper Admin Console under Admin > Roles > Enforcement Policies > Account Transfer.
  2. In the IdP, deactivate or remove the user from the Keeper application.
  3. IdP sends PATCH /Users/{id} with active=false; Keeper locks the user account immediately.
  4. Optionally send DELETE /Users/{id} to remove the user from the enterprise node.
  5. The designated admin initiates vault transfer from the Admin Console to recover shared credentials.

Watch out for: If vault transfer policy is not configured before deletion, vault data may be unrecoverable due to Keeper zero-knowledge encryption.

Bulk user management via Keeper Commander CLI

  1. Install Keeper Commander: pip install keepercommander.
  2. Create a config.json with Keeper admin credentials or SSO device token.
  3. Run keeper shell to enter interactive mode, or use keeper --batch-mode for scripted operations.
  4. Use enterprise-user list to enumerate users, enterprise-user invite to create users, and enterprise-user lock or enterprise-user delete for lifecycle management.
  5. Use enterprise-team add-user to assign users to teams (equivalent to SCIM Group membership).

Watch out for: Commander requires admin-level Keeper credentials and device approval; it is not token-based like SCIM and is not suitable for IdP-driven automated provisioning.

Why building this yourself is a trap

The primary integration trap is the node_id path parameter: it is not a standard SCIM tenant identifier and is invisible to IdP SCIM app templates that assume a flat base URL. Misconfiguring it produces 404s that are easy to misattribute to auth failures.

The second trap is the active/delete split: setting active=false locks the user but preserves vault data and the license seat; DELETE is irreversible and vault data is unrecoverable if transfer policy was not pre-configured. These two operations must be sequenced deliberately, not treated as equivalent offboarding actions.

For teams building an identity graph across their SaaS stack, Keeper's zero-knowledge model means no password or vault content fields are accessible or settable via any API - the identity graph can track user existence, group membership, and active status, but vault contents are architecturally opaque.

Webhooks are not available; event-driven workflows must originate from the IdP side, making Keeper a passive provisioning target rather than an event source.

Automate Keeper 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 11, 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