Users
List, search, create, update, archive, and inspect user accounts.
Adds or removes access to one Skillhabit application for the user. action controls whether the selected application is added or removed. Supported applicationId values are achievements, analyse, create, learn, and follow-up.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose application access should be updated.
Access update action.
Value in
- "ADD"
- "REMOVE"
Request Body
application/json
Application access request.
TypeScript Definitions
Use the request body type in TypeScript.
Request to grant or revoke access to one Skillhabit application.
Response Body
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/access/ADD" \ -H "Content-Type: application/json" \ -d '{}'Archives a user account. Admin users cannot be archived and return a bad request.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id to archive.
Response Body
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/archive"Returns users for the customer. Use filter to search by user fields supported by the user service; an empty filter returns all users. The response includes resolved custom field names and pagination metadata.
Authorization
Bearer A JSON Web Token
In: header
Query Parameters
Search filter. Empty string returns all users.
""Number of matching users to skip.
int320Maximum number of users to return.
int32100Response Body
application/json
curl -X GET "https://example.com/users?filter=alice&skip=0&limit=100"{ "users": [ { "userId": "7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01", "email": "employee@example.com", "firstName": "string", "lastName": "string", "avatarUrl": "string", "customFields": { "property1": {}, "property2": {} }, "emailStatus": "string", "metadata": { "property1": "string", "property2": "string" }, "archivedAt": 1700000000000, "customArchiveDate": 1750000000000 } ], "skip": 0, "limit": 100, "filter": "string", "matchCount": 250}Creates a user account for the customer. The request may include name, language, and whether a welcome email should be sent.
Authorization
Bearer A JSON Web Token
In: header
Request Body
application/json
User creation request.
TypeScript Definitions
Use the request body type in TypeScript.
Create user request.
Response Body
application/json
curl -X POST "https://example.com/users" \ -H "Content-Type: application/json" \ -d '{}'{ "userId": "7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01", "newUser": true}Returns one user account with profile fields, metadata, custom fields, integrations, and current group membership information.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id to retrieve.
Response Body
application/json
curl -X GET "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01"{ "userId": "7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01", "email": "employee@example.com", "firstName": "string", "lastName": "string", "avatarUrl": "string", "customFields": { "property1": {}, "property2": {} }, "emailStatus": "string", "language": "en", "lastLoginAt": 0, "admin": true, "manager": true, "applicationIds": [ "string" ], "metadata": { "property1": "string", "property2": "string" }, "createdAt": 1700000000000, "timeZone": { "displayName": "string", "id": "string", "dstsavings": 0, "rawOffset": 0 }, "integrationIds": { "property1": "string", "property2": "string" }, "archivedAt": 0, "scheduledDeleteDate": 0, "customArchiveDate": 0, "memberOfGroups": [ { "groupId": "7d6b7a10-2b2a-4a30-8a2e-39ad8e4f2b11", "groupType": "string", "name": "string" } ], "managerOfGroups": [ { "groupId": "7d6b7a10-2b2a-4a30-8a2e-39ad8e4f2b11", "groupType": "string", "name": "string" } ]}Deletes a user account by id.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id to delete.
Response Body
application/json
curl -X DELETE "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01"Returns certificates for the selected users. Use flatView=true to request the downstream flat response shape; omit it for the grouped-by-user response.
Authorization
Bearer A JSON Web Token
In: header
Query Parameters
User ids whose certificates should be returned.
When true, returns the downstream flat certificate view instead of the grouped user view.
Response Body
application/json
curl -X GET "https://example.com/users/certificates?userIds%5B%5D=7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01&flatView=false"{ "usersWithCertificates": { "property1": { "contentId": "d69c7cd1-9943-4f7f-b95f-0572b3458e9c", "contentType": "COURSE", "contentName": "string", "certificateId": "e2d2a9c7-5349-4ca7-a1dc-7c1b2a3e4f50", "issued": 1700000000000, "pdfUri": "string", "status": "ACTIVE", "recertificationContentId": "string", "expiresAt": 1731536000000, "certificateAttachment": "string", "certificateAttachments": [ { "url": "string", "name": "string", "createdAt": 1700000000000 } ], "recertificationCertificate": { "contentId": "d69c7cd1-9943-4f7f-b95f-0572b3458e9c", "contentType": "COURSE", "contentName": "string", "certificateId": "e2d2a9c7-5349-4ca7-a1dc-7c1b2a3e4f50", "issued": 0, "pdfUri": "string", "status": "ACTIVE", "recertificationContentId": "string", "expiresAt": 0, "certificateAttachment": "string", "certificateAttachments": [ { "url": "string", "name": "string", "createdAt": 1700000000000 } ], "expiredNotificationEnabled": true }, "expiredNotificationEnabled": true }, "property2": { "contentId": "d69c7cd1-9943-4f7f-b95f-0572b3458e9c", "contentType": "COURSE", "contentName": "string", "certificateId": "e2d2a9c7-5349-4ca7-a1dc-7c1b2a3e4f50", "issued": 1700000000000, "pdfUri": "string", "status": "ACTIVE", "recertificationContentId": "string", "expiresAt": 1731536000000, "certificateAttachment": "string", "certificateAttachments": [ { "url": "string", "name": "string", "createdAt": 1700000000000 } ], "recertificationCertificate": { "contentId": "d69c7cd1-9943-4f7f-b95f-0572b3458e9c", "contentType": "COURSE", "contentName": "string", "certificateId": "e2d2a9c7-5349-4ca7-a1dc-7c1b2a3e4f50", "issued": 0, "pdfUri": "string", "status": "ACTIVE", "recertificationContentId": "string", "expiresAt": 0, "certificateAttachment": "string", "certificateAttachments": [ { "url": "string", "name": "string", "createdAt": 1700000000000 } ], "expiredNotificationEnabled": true }, "expiredNotificationEnabled": true } }}List custom fields for user updates
DeprecatedDeprecated compatibility endpoint that returns the customer's available custom fields for older user custom-field update clients. Prefer GET /custom-fields.
Authorization
Bearer A JSON Web Token
In: header
Response Body
application/json
curl -X GET "https://example.com/users/custom-field-choice"{ "customFields": [ { "customFieldId": "22576317-111e-4373-9d27-b04469f360d3", "id": "22576317-111e-4373-9d27-b04469f360d3", "type": "CHOICE", "name": "Department", "choices": [ { "choiceId": "8a9064d1-2226-41e1-b203-33a42063c251", "name": "Sales" } ] } ]}Returns certificates issued to one user.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose certificates should be returned.
Response Body
application/json
curl -X GET "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/certificates"{ "userId": "7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01", "certificates": [ { "contentId": "d69c7cd1-9943-4f7f-b95f-0572b3458e9c", "contentType": "COURSE", "contentName": "string", "certificateId": "e2d2a9c7-5349-4ca7-a1dc-7c1b2a3e4f50", "issued": 1700000000000, "pdfUri": "string", "status": "ACTIVE", "recertificationContentId": "string", "expiresAt": 1731536000000, "certificateAttachment": "string", "certificateAttachments": [ { "url": "string", "name": "string", "createdAt": 1700000000000 } ], "recertificationCertificate": { "contentId": "d69c7cd1-9943-4f7f-b95f-0572b3458e9c", "contentType": "COURSE", "contentName": "string", "certificateId": "e2d2a9c7-5349-4ca7-a1dc-7c1b2a3e4f50", "issued": 0, "pdfUri": "string", "status": "ACTIVE", "recertificationContentId": "string", "expiresAt": 0, "certificateAttachment": "string", "certificateAttachments": [ { "url": "string", "name": "string", "createdAt": 1700000000000 } ], "expiredNotificationEnabled": true }, "expiredNotificationEnabled": true } ]}Returns Academy order/contact details stored for a user. These values are used when creating content purchase orders.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose order details should be returned.
Response Body
application/json
application/json
curl -X GET "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/order-details"{ "disablePayment": false, "email": "string", "firstName": "string", "lastName": "string", "companyName": "string", "companyNumber": "string", "companyEmail": "string", "phone": "string", "phoneCode": "string", "address": { "street": "string", "city": "string", "country": "string", "phone": "string", "zip": "string" }, "companyPayment": false, "note": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Updates Academy order/contact details for a user.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose order details should be updated.
Request Body
application/json
Order/contact fields to store for the user.
TypeScript Definitions
Use the request body type in TypeScript.
Request body for updating user order/contact details.
Response Body
application/json
application/json
curl -X PUT "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/order-details" \ -H "Content-Type: application/json" \ -d '{}'{ "disablePayment": false, "email": "string", "firstName": "string", "lastName": "string", "companyName": "string", "companyNumber": "string", "companyEmail": "string", "phone": "string", "phoneCode": "string", "address": { "street": "string", "city": "string", "country": "string", "phone": "string", "zip": "string" }, "companyPayment": false, "note": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Returns users with manual/smart group memberships, manager groups, and available application permissions. Use filter to search; an empty filter returns all users.
Authorization
Bearer A JSON Web Token
In: header
Query Parameters
Search filter. Empty string returns all users.
""Number of matching users to skip.
int320Maximum number of users to return.
int32100Response Body
application/json
curl -X GET "https://example.com/users/extended-info?filter=alice&skip=0&limit=100"{ "users": [ { "userId": "7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01", "email": "employee@example.com", "firstName": "string", "lastName": "string", "avatarUrl": "string", "emailStatus": "string", "admin": true, "manager": true, "memberOfGroups": [ { "groupId": "7d6b7a10-2b2a-4a30-8a2e-39ad8e4f2b11", "groupType": "string", "name": "string" } ], "managerOfGroups": [ { "groupId": "7d6b7a10-2b2a-4a30-8a2e-39ad8e4f2b11", "groupType": "string", "name": "string" } ], "availableApplications": [ "string" ] } ], "skip": 0, "limit": 100, "filter": "string", "matchCount": 250}Grants or revokes administrator rights for a user. Use endow=true to grant admin access and endow=false to revoke it.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose admin access should be updated.
true grants admin access; false revokes admin access.
Response Body
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/make-admin/true"Grants or revokes manager rights for a user. Use endow=true to grant manager access and endow=false to revoke it.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose manager access should be updated.
true grants manager access; false revokes manager access.
Response Body
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/make-manager/true"Search for users in the system with advanced filtering capabilities. This endpoint supports filtering by text search (searches in user name or email), metadata key-value pairs, pagination (skip/limit), and optionally includes group information and application permissions. The metadata parameter allows filtering users based on custom metadata stored as key-value pairs. When includeGroups is set to true, the response will include group memberships for each user.
Authorization
Bearer A JSON Web Token
In: header
Request Body
application/json
Advanced search request. Use includeGroups=true to include group memberships and application access.
TypeScript Definitions
Use the request body type in TypeScript.
Advanced user search request.
Response Body
application/json
application/json
curl -X POST "https://example.com/users/search" \ -H "Content-Type: application/json" \ -d '{}'{ "users": [ { "userId": "7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01", "email": "employee@example.com", "firstName": "string", "lastName": "string", "avatarUrl": "string", "customFields": { "property1": {}, "property2": {} }, "emailStatus": "string", "metadata": { "property1": "string", "property2": "string" }, "admin": true, "manager": true, "memberOfGroups": [ { "groupId": "7d6b7a10-2b2a-4a30-8a2e-39ad8e4f2b11", "groupType": "string", "name": "string" } ], "managerOfGroups": [ { "groupId": "7d6b7a10-2b2a-4a30-8a2e-39ad8e4f2b11", "groupType": "string", "name": "string" } ], "availableApplications": [ "string" ] } ], "matchCount": 250}Set a custom date when the user account will be archived. Pass null date to reset the custom archived date. Admin or manager users can not have a custom archived date.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose custom archive date should be updated.
Request Body
application/json
Custom archive date in epoch milliseconds, or null to clear it.
TypeScript Definitions
Use the request body type in TypeScript.
Custom archive date update request.
Response Body
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/set-custom-archived-date" \ -H "Content-Type: application/json" \ -d '{}'Unarchive a previously archived user account.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id to unarchive.
Response Body
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/unarchive"Updates custom field answers on a user account. The request shape is forwarded to the user service and contains custom-field ids mapped to selected values.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose custom fields should be updated.
Request Body
application/json
Custom field answers for the user. Keys and allowed values depend on the customer's custom field definitions.
TypeScript Definitions
Use the request body type in TypeScript.
User custom field answer update request.
Response Body
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/update-custom-field-choice" \ -H "Content-Type: application/json" \ -d '{}'Changes the email address of a user account after validating the email format.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose email should be updated.
Request Body
application/json
New email address.
TypeScript Definitions
Use the request body type in TypeScript.
Email update request.
Response Body
application/json
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/update-email" \ -H "Content-Type: application/json" \ -d '{ "email": "new.email@example.com" }'Updates the first and/or last name of a user account.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose name should be updated.
Request Body
application/json
First and last name values to store on the user.
TypeScript Definitions
Use the request body type in TypeScript.
User name update request.
Response Body
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/update-fullname" \ -H "Content-Type: application/json" \ -d '{ "firstName": "Alice", "lastName": "Example" }'Updates the user's preferred language. The language code must be one of the supported lowercase language codes, such as en, sv, de, no, nl, fi, uk, or es.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose language should be updated.
Request Body
application/json
New preferred language code.
TypeScript Definitions
Use the request body type in TypeScript.
Language update request.
Response Body
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/update-language" \ -H "Content-Type: application/json" \ -d '{ "language": "en" }'Replaces or updates customer-defined metadata on a user account. Metadata keys and values are customer-specific strings.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose metadata should be updated.
Request Body
application/json
Metadata key/value pairs to store on the user.
TypeScript Definitions
Use the request body type in TypeScript.
Metadata update request.
Response Body
application/json
curl -X POST "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/update-metadata" \ -H "Content-Type: application/json" \ -d '{ "metadata": { "property1": "string", "property2": "string" } }'Enables or disables payment access for one user in Academy purchase flows.
Authorization
Bearer A JSON Web Token
In: header
Path Parameters
User id whose payment access should be updated.
Request Body
application/json
Payment access flag.
TypeScript Definitions
Use the request body type in TypeScript.
Payment access update request.
Response Body
application/json
application/json
curl -X PUT "https://example.com/users/7f9c2a1e-4b8d-4f6a-9c2e-1d3b5a7e9c01/disable-payment" \ -H "Content-Type: application/json" \ -d '{}'{ "disablePayment": false, "email": "string", "firstName": "string", "lastName": "string", "companyName": "string", "companyNumber": "string", "companyEmail": "string", "phone": "string", "phoneCode": "string", "address": { "street": "string", "city": "string", "country": "string", "phone": "string", "zip": "string" }, "companyPayment": false, "note": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}