Create and manage users via SCIM
After you connect your external identity provider (IdP) to qTest Manager through System for Cross-domain Identity Management (SCIM 2.0), we recommend that you use your IdP as the central management platform for the following changes:
We strongly recommend that you organize users and groups in your IdP. You can make changes directly in qTest Manager, but you'll lose those changes the next time your IdP synchronizes.
Create users via SCIM
A SCIM user account can contain many attributes, but qTest Manager stores a simple user record.
When you create a user through SCIM, qTest Manager requires the following information:
| Field | Notes |
|---|---|
| userName | Unique login identifier, typically the user's email address. |
| name.givenName | User's given name. |
| name.familyName | User's family name. |
| emails[].value | At least one email address. qTest Manager only stores the first entry's value. |
| active | User status: true for active user, false for archived user. |
Create a new user. qTest Manager stores jdoe@example.com as the account email.
POST /scim/v2/Users
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "jdoe@example.com",
"name": {
"givenName": "Jane",
"familyName": "Doe"
},
"emails": [
{ "value": "jdoe@example.com", "type": "work", "primary": true }
],
"active": true
}
A successful create returns 201. qTest assigns a numeric user ID. For example, "id": "12345". Use that ID in later SCIM user management calls.
201 Created
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": "12345",
"userName": "jdoe@example.com",
"name": {
"givenName": "Jane",
"familyName": "Doe",
"formatted": "Jane Doe"
},
"emails": [
{ "value": "jdoe@example.com", "type": "work", "primary": true }
],
"active": true,
"meta": {
"resourceType": "User",
"location": "/scim/v2/Users/12345"
}
}
Email handling
When qTest Manager receives a request to create a user through SCIM, it uses only the first value of emails. qTest ignores the sub-attributes emails[].type and emails[].primary.
Responses always return the stored email as type: "work" and primary: true.
Manage user activation via SCIM
You can activate or deactivate qTest users through PATCH /scim/v2/Users/{id} with the active path.
To manage user activation, use the boolean active path:
-
true: Activates a user. This sets the user's Status to Active on the Licenses page.
-
false: Archives a user. This sets the user's Status to Inactive on the Licenses page.
You can't change display name, given name, family name, or email through SCIM. Currently, you can only define whether a user is active or inactive.
Archive a user. To do so, you go to the active path in the patch operation, and change the value to false.
PATCH /scim/v2/Users/12345
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{ "op": "replace", "path": "active", "value": false }
]
}
Manage group membership
You can add or remove group members through PATCH /scim/v2/Groups/{groupName}.
Access groups according to the group displayName, not the ID. This is from the Group Name defined in User Groups. Your path will look like this when you read or update a group: /scim/v2/Groups/QA Team.
Groups only support member operations, as our SCIM API doesn't currently support nested groups. The members[].value field must be the numeric qTest user ID assigned when you created the user.
Some IdPs, such as Okta, use the PATCH replace operation to update groups. qTest Manager only supports add and remove operations for groups. So, membership syncs will fail on any IdPs that use replace. Microsoft Entra ID isn't affected.
Add a member with the user ID 12345 to the QA Team user group.
PATCH /scim/v2/Groups/QA Team
Content-Type: application/scim+json
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "add",
"path": "members",
"value": [{ "value": "12345" }]
}
]
}
List, filter, and paginate users and groups
Filtering support is deliberately narrow. Any filter outside the supported attributes and operators returns 400 Bad Request with scimType: invalidFilter.
Filter keywords are case-insensitive, with a maximum filter length of 512 characters and max quoted value of 256 characters.
qTest Manager supports the following filters:
| Endpoint | Attribute | Operators | Example |
|---|---|---|---|
| GET /Users | userName | eq, co | userName eq "jdoe@example.com" |
| GET /Groups | displayName | eq | displayName eq "QA Team" |
Query parameters
See the table below to see which parameters qTest Manager supports, or doesn't support, for GET /Users and GET /Groups:
| Parameter | GET /Users | GET /Groups |
|---|---|---|
| filter | Yes (userName) | Yes (displayName) |
| startIndex / count | Yes (count capped at 200) | Yes (count capped at 200) |
| sortBy / sortOrder | Yes (sortBy=userName only) | Not supported |
| attributes / excludedAttributes | Rejected with 400 | Not supported |
Error responses
Failed SCIM requests return a SCIM error object:
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"status": "400",
"scimType": "invalidSyntax",
"detail": "Description of the error."
}
Common scimType values include invalidSyntax, invalidFilter, and forbidden.
Here are the responses you should be familiar with:
| Error Code | Notes |
|---|---|
| 400 |
Can indicate an invalid request, due to an unsupported parameter, filter, or other incorrect syntax. With scimType: invalidSyntax, it can also indicate an attempt to add a user whose userName already exists. Note that this differs from the SCIM-standard 409 uniqueness response. |
| 401 | Indicates that the request has no credentials, or that the bearer token is invalid or expired. |
| 403 | With scimType: forbidden, this indicates that the caller is authenticated but does not have isn't an Adminstrator in qTest. |
| 404 | Indicates that the resource was not found or that the scim-enabled feature flag is off for your tenant. |
What's next
For full endpoint reference and interactive examples, use the SCIM 2.0 API documentation in Download qTest Resources .