Summary and recommendation
WalkMe exposes two parallel API surfaces for user lifecycle management: a REST API at https://api.walkme.com and a SCIM 2.0 endpoint at https://api.walkme.com/scim/v2.
Both require separate authentication tokens - REST uses short-lived OAuth 2.0 Bearer tokens obtained via client credentials flow;
SCIM uses a static bearer token generated in the WalkMe Console under Settings > Security > SCIM.
Do not reuse credentials between the two surfaces.
The REST API supports full CRUD on users and groups with offset-based pagination (default 100, max 1000 per page via `page` / `pageSize` params).
Required scopes are `users:read`, `users:write`, and `users:delete`.
Rate-limit thresholds are not published in official documentation;
contact WalkMe support before building high-volume pipelines.
API quick reference
| Has user API | Yes |
| Auth method | OAuth 2.0 (client credentials flow); Bearer token passed in Authorization header |
| Base URL | Official docs |
| SCIM available | Yes |
| SCIM plan required | Enterprise |
Authentication
Auth method: OAuth 2.0 (client credentials flow); Bearer token passed in Authorization header
Setup steps
- Log in to the WalkMe Console and navigate to Settings > Integrations > API.
- Create an API application to obtain a Client ID and Client Secret.
- POST to https://api.walkme.com/accounts/connect/token with grant_type=client_credentials, client_id, and client_secret to receive an access_token.
- Include the token as 'Authorization: Bearer
' on all subsequent API requests. - Tokens are time-limited; re-authenticate when the token expires.
Required scopes
| Scope | Description | Required for |
|---|---|---|
| users:read | Read user records and attributes | GET /users, GET /users/{id} |
| users:write | Create and update user records | POST /users, PUT /users/{id}, PATCH /users/{id} |
| users:delete | Delete or deactivate user records | DELETE /users/{id} |
User object / data model
| Field | Type | Description | On create | On update | Notes |
|---|---|---|---|---|---|
| id | string (UUID) | WalkMe-assigned unique user identifier | system-generated | immutable | Used as path parameter in user-specific endpoints |
| string | User's primary email address | required | optional | Must be unique within the account | |
| firstName | string | User's first name | optional | optional | |
| lastName | string | User's last name | optional | optional | |
| role | string (enum) | WalkMe Console role (e.g., Admin, Editor, Viewer) | optional | optional | Determines Console access level |
| status | string (enum) | Account status: active, inactive, pending | system-set | optional | Set to inactive to deactivate without deleting |
| createdAt | ISO 8601 datetime | Timestamp of user creation | system-generated | immutable | |
| updatedAt | ISO 8601 datetime | Timestamp of last update | system-generated | system-updated | |
| externalId | string | Identifier from an external IdP or HR system | optional | optional | Used for SCIM correlation |
| groups | array of strings | Group memberships for the user | optional | optional | Group IDs; used for segmentation and content targeting |
Core endpoints
List Users
- Method: GET
- URL:
https://api.walkme.com/users - Watch out for: Pagination parameters must be included explicitly; omitting them may return only the first page.
Request example
GET /users?page=1&pageSize=100
Authorization: Bearer <token>
Response example
{
"users": [{"id":"abc123","email":"user@example.com","status":"active"}],
"total": 250,
"page": 1
}
Get User by ID
- Method: GET
- URL:
https://api.walkme.com/users/{userId} - Watch out for: Returns 404 if the userId does not exist in the account scope of the token.
Request example
GET /users/abc123
Authorization: Bearer <token>
Response example
{
"id": "abc123",
"email": "user@example.com",
"firstName": "Jane",
"role": "Editor",
"status": "active"
}
Create User
- Method: POST
- URL:
https://api.walkme.com/users - Watch out for: Duplicate email addresses return a 409 Conflict error.
Request example
POST /users
Content-Type: application/json
{"email":"new@example.com","firstName":"John","role":"Viewer"}
Response example
{
"id": "def456",
"email": "new@example.com",
"status": "pending"
}
Update User
- Method: PUT
- URL:
https://api.walkme.com/users/{userId} - Watch out for: Full replacement semantics; omitted fields may be cleared. Use PATCH for partial updates if supported.
Request example
PUT /users/def456
Content-Type: application/json
{"role":"Editor","status":"active"}
Response example
{
"id": "def456",
"role": "Editor",
"status": "active"
}
Delete User
- Method: DELETE
- URL:
https://api.walkme.com/users/{userId} - Watch out for: Deletion is permanent. Consider setting status=inactive for reversible deactivation.
Request example
DELETE /users/def456
Authorization: Bearer <token>
Response example
HTTP 204 No Content
List Groups
- Method: GET
- URL:
https://api.walkme.com/groups - Watch out for: Groups are used for content segmentation; group membership affects which WalkMe content users see.
Request example
GET /groups
Authorization: Bearer <token>
Response example
{
"groups": [{"id":"grp1","name":"Sales"}]
}
Add User to Group
- Method: POST
- URL:
https://api.walkme.com/groups/{groupId}/users - Watch out for: User must already exist in WalkMe before being added to a group.
Request example
POST /groups/grp1/users
Content-Type: application/json
{"userId":"abc123"}
Response example
HTTP 200 OK
{"groupId":"grp1","userId":"abc123"}
Remove User from Group
- Method: DELETE
- URL:
https://api.walkme.com/groups/{groupId}/users/{userId} - Watch out for: Removing a user from all groups may affect content targeting and analytics segmentation.
Request example
DELETE /groups/grp1/users/abc123
Authorization: Bearer <token>
Response example
HTTP 204 No Content
Rate limits, pagination, and events
Rate limits: WalkMe's public documentation does not explicitly publish rate-limit thresholds or tier-based limits as of the policy date.
Rate-limit headers: Unknown
Retry-After header: Unknown
Rate-limit notes: No explicit rate-limit values, headers, or Retry-After behavior documented in official sources. Contact WalkMe support for current limits.
Pagination method: offset
Default page size: 100
Max page size: 1000
Pagination pointer: page / pageSize
Webhooks available: No
Webhook notes: WalkMe's official developer documentation does not describe outbound webhook events for user lifecycle changes as of the policy date.
Alternative event strategy: Use SCIM provisioning with Okta or Entra ID to automate user lifecycle events via IdP-driven push.
SCIM API status
SCIM available: Yes
SCIM version: 2.0
Plan required: Enterprise
Endpoint: https://api.walkme.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}, DELETE /Groups/{id}
Limitations:
- Requires SSO to be configured before SCIM provisioning can be enabled.
- Officially supported IdPs are Okta and Microsoft Entra ID (Azure AD); other IdPs may work but are not officially documented.
- Google Workspace and OneLogin are not listed as supported IdPs in official documentation.
- SCIM token is generated in the WalkMe Console under Settings > Security > SCIM; token rotation requires manual regeneration.
- Enterprise plan required; not available on lower tiers.
Common scenarios
Three integration patterns are well-supported by the available API surface.
For automated onboarding via SCIM with Okta, the prerequisite chain is strict: Enterprise plan active → SSO fully configured and verified → SCIM token generated → Okta SCIM 2.0 app configured with attribute mappings for userName, name.givenName, name.familyName, and groups.
SCIM push fires on Okta group assignment;
if SSO is not active at enablement time, provisioning will silently fail.
For bulk imports via REST, there is no batch-create endpoint;
each user requires an individual POST to /users.
Build retry logic for transient errors and handle 409 Conflict on duplicate emails by skipping or patching existing records, then follow up with group assignments via POST to /groups/{groupId}/users.
For offboarding, prefer PATCH with status=inactive over DELETE /users/{userId} - deletion is permanent and irreversible via API, which breaks audit trail continuity.
If the user is IdP-managed via SCIM, unassigning them in Okta or Entra ID triggers automatic deprovisioning without a direct API call.
Automated Employee Onboarding via SCIM (Okta)
- Ensure WalkMe Enterprise plan is active and SSO (SAML/OIDC) is configured in the WalkMe Console.
- In WalkMe Console, navigate to Settings > Security > SCIM and generate a SCIM bearer token.
- In Okta, add WalkMe as a SCIM 2.0 application using the WalkMe SCIM endpoint and bearer token.
- Configure Okta attribute mappings for userName (email), name.givenName, name.familyName, and groups.
- Assign the Okta application to user groups; Okta will push new users to WalkMe automatically on assignment.
- Verify provisioned users appear in WalkMe Console under Users with correct roles and group memberships.
Watch out for: If SSO is not active, SCIM provisioning will not function. Confirm SSO login works before enabling SCIM push.
Bulk User Import via REST API
- Obtain an OAuth 2.0 access token via POST to https://api.walkme.com/accounts/connect/token.
- Prepare a list of users (email, firstName, lastName, role) from your HR or directory system.
- For each user, POST to https://api.walkme.com/users with the user payload.
- Handle 409 Conflict responses for duplicate emails by skipping or updating existing records.
- After creation, POST to https://api.walkme.com/groups/{groupId}/users to assign users to relevant groups.
- Verify users in WalkMe Console and confirm group assignments for correct content targeting.
Watch out for: No bulk-create endpoint is documented; each user requires an individual POST request. Implement retry logic for transient errors.
User Deactivation on Offboarding
- Obtain a valid Bearer token via the OAuth 2.0 client credentials flow.
- Look up the departing user's WalkMe ID via GET /users?email=user@example.com or GET /users/{userId}.
- PATCH or PUT the user record with status=inactive to deactivate without permanent deletion.
- Optionally, remove the user from all groups via DELETE /groups/{groupId}/users/{userId} to revoke content targeting.
- If using SCIM with Okta or Entra ID, unassigning the user in the IdP will trigger automatic deprovisioning.
Watch out for: Prefer status=inactive over DELETE for audit trail retention. Permanent deletion cannot be undone via API.
Why building this yourself is a trap
Building a point-to-point integration directly against the WalkMe REST or SCIM API introduces several maintenance risks that compound over time. OAuth tokens are short-lived with no documented refresh endpoint behavior, requiring robust token lifecycle management in your integration layer.
The SCIM endpoint base URL is tenant-specific and must be retrieved from the console after SCIM is enabled - it is not derivable from the REST base URL. WalkMe roles control Console authoring access only;
end-user content targeting is governed by group membership and variables, meaning a correctly provisioned user with the wrong group assignment will receive incorrect or no WalkMe guidance. No official SDK is documented, so all integrations are raw HTTP.
An identity graph built on top of a platform like Stitchflow's MCP server with 60+ deep IT/identity integrations avoids re-implementing token refresh, pagination handling, and cross-system role reconciliation for each connected app - and surfaces the WalkMe user object alongside the rest of your identity data without custom glue code.
Automate WalkMe 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.