Stitchflow
Qualtrics logo

Qualtrics 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

The Qualtrics REST API v3 exposes full user lifecycle operations - list, get, create, update, and delete/disable - under the base URL https://{datacenterid}.qualtrics.com/API/v3.

Authentication is via a per-user API token passed as the X-API-TOKEN header; administrative operations require a token belonging to a Brand Administrator account.

The datacenter ID (e.g., iad1, fra1, syd1) is account-specific and must be resolved from Account Settings → Qualtrics IDs before any requests are made - using the wrong datacenter returns authentication errors, not a routing error.

Pagination is token-based: the response includes a nextPage field containing a full absolute URL; iterate until nextPage is null. Default and maximum page size is 100.

Rate limits are enforced but numeric thresholds are not publicly documented; implement exponential backoff on HTTP 429. SCIM 2.0 is available on Enterprise plans with SSO configured, exposing a parallel endpoint at https://{datacenterid}.qualtrics.com/scim/v2 with a separate bearer token.

No native webhooks exist for user lifecycle events. Changes must be detected by polling GET /API/v3/users or by relying on SCIM push from a connected IdP.

API quick reference

Has user APIYes
Auth methodAPI Token (X-API-TOKEN header)
Base URLOfficial docs
SCIM availableYes
SCIM plan requiredEnterprise (requires SSO to be configured first)

Authentication

Auth method: API Token (X-API-TOKEN header)

Setup steps

  1. Log in to Qualtrics and navigate to Account Settings > Qualtrics IDs.
  2. Locate or generate your API Token under the 'API' section.
  3. Include the token in all API requests as the header: X-API-TOKEN: .
  4. Identify your datacenter ID from the same Qualtrics IDs page (e.g., 'iad1', 'fra1') and substitute it into the base URL.

User object / data model

Field Type Description On create On update Notes
id string Unique Qualtrics user ID (e.g., URH_xxxxxxxxxxxxxxx) system-generated immutable Used as path parameter in user-specific endpoints.
username string User's login username (typically email) required optional Must be unique within the organization.
firstName string User's first name required optional
lastName string User's last name required optional
email string User's email address required optional Used for notifications and login.
userType string Type of user account (e.g., 'UT_RESPONDENT', 'UT_BRAND_ADMINISTRATOR') required optional Determines base permissions.
status string Account status: 'active' or 'disabled' optional optional Defaults to 'active' on creation.
language string Preferred language code (e.g., 'EN') optional optional
timeZone string User's time zone (e.g., 'America/Chicago') optional optional
accountExpirationDate string (ISO 8601) Date when the account expires optional optional Null means no expiration.
divisionId string ID of the division the user belongs to optional optional Relevant for organizations using divisions.
organizationId string Brand/organization ID the user belongs to system-assigned immutable
permissions object Map of permission keys to boolean values optional optional Granular feature permissions; structure varies by userType.
password string User password (write-only) optional optional Never returned in responses.

Core endpoints

List Users

  • Method: GET
  • URL: https://{datacenterid}.qualtrics.com/API/v3/users
  • Watch out for: Pagination uses a full URL in 'nextPage'; iterate until nextPage is null.

Request example

GET /API/v3/users?pageSize=100 HTTP/1.1
Host: iad1.qualtrics.com
X-API-TOKEN: <token>

Response example

{
  "result": {
    "elements": [{"id":"URH_abc","username":"user@example.com"}],
    "nextPage": "https://iad1.qualtrics.com/API/v3/users?pageSize=100&offset=100"
  },
  "meta": {"httpStatus": "200 - OK"}
}

Get User

  • Method: GET
  • URL: https://{datacenterid}.qualtrics.com/API/v3/users/{userId}
  • Watch out for: Use the Qualtrics user ID (URH_...), not the email address, as the path parameter.

Request example

GET /API/v3/users/URH_abc123 HTTP/1.1
Host: iad1.qualtrics.com
X-API-TOKEN: <token>

Response example

{
  "result": {
    "id": "URH_abc123",
    "username": "user@example.com",
    "firstName": "Jane",
    "lastName": "Doe",
    "email": "user@example.com",
    "status": "active"
  },
  "meta": {"httpStatus": "200 - OK"}
}

Create User

  • Method: POST
  • URL: https://{datacenterid}.qualtrics.com/API/v3/users
  • Watch out for: userType must be a valid type for your brand; invalid types return a 400 error.

Request example

POST /API/v3/users HTTP/1.1
Host: iad1.qualtrics.com
X-API-TOKEN: <token>
Content-Type: application/json

{"username":"new@example.com","firstName":"John","lastName":"Smith","email":"new@example.com","userType":"UT_RESPONDENT"}

Response example

{
  "result": {"id": "URH_newuser123"},
  "meta": {"httpStatus": "200 - OK"}
}

Update User

  • Method: PUT
  • URL: https://{datacenterid}.qualtrics.com/API/v3/users/{userId}
  • Watch out for: Qualtrics uses PUT (not PATCH) for user updates; only include fields you wish to change.

Request example

PUT /API/v3/users/URH_abc123 HTTP/1.1
Host: iad1.qualtrics.com
X-API-TOKEN: <token>
Content-Type: application/json

{"firstName":"Jane","status":"disabled"}

Response example

{
  "result": {},
  "meta": {"httpStatus": "200 - OK"}
}

Delete User (Disable)

  • Method: DELETE
  • URL: https://{datacenterid}.qualtrics.com/API/v3/users/{userId}
  • Watch out for: Deleting a user may disable rather than permanently remove the account depending on brand settings; verify behavior in your environment.

Request example

DELETE /API/v3/users/URH_abc123 HTTP/1.1
Host: iad1.qualtrics.com
X-API-TOKEN: <token>

Response example

{
  "result": {},
  "meta": {"httpStatus": "200 - OK"}
}

Get Authenticated User (Whoami)

  • Method: GET
  • URL: https://{datacenterid}.qualtrics.com/API/v3/whoami
  • Watch out for: Useful for validating token identity and resolving the caller's userId and datacenter.

Request example

GET /API/v3/whoami HTTP/1.1
Host: iad1.qualtrics.com
X-API-TOKEN: <token>

Response example

{
  "result": {
    "userId": "URH_abc123",
    "username": "admin@example.com",
    "brandId": "mybrand"
  },
  "meta": {"httpStatus": "200 - OK"}
}

List Divisions

  • Method: GET
  • URL: https://{datacenterid}.qualtrics.com/API/v3/divisions
  • Watch out for: Division IDs are required when assigning users to divisions during creation or update.

Request example

GET /API/v3/divisions HTTP/1.1
Host: iad1.qualtrics.com
X-API-TOKEN: <token>

Response example

{
  "result": {
    "elements": [{"id":"DV_abc","name":"Sales Division"}],
    "nextPage": null
  },
  "meta": {"httpStatus": "200 - OK"}
}

Get User API Token

  • Method: GET
  • URL: https://{datacenterid}.qualtrics.com/API/v3/users/{userId}/apitoken
  • Watch out for: Requires Brand Administrator privileges; returns the target user's API token, not the caller's.

Request example

GET /API/v3/users/URH_abc123/apitoken HTTP/1.1
Host: iad1.qualtrics.com
X-API-TOKEN: <admin_token>

Response example

{
  "result": {"apiToken": "abc123tokenvalue"},
  "meta": {"httpStatus": "200 - OK"}
}

Rate limits, pagination, and events

  • Rate limits: Qualtrics enforces rate limits per API token. The official docs note limits exist but do not publicly publish specific numeric thresholds per plan tier.

  • Rate-limit headers: No

  • Retry-After header: No

  • Rate-limit notes: Rate limit details are not publicly documented. Qualtrics returns HTTP 429 when limits are exceeded. Contact Qualtrics support for specific limits applicable to your license.

  • Pagination method: token

  • Default page size: 100

  • Max page size: 100

  • Pagination pointer: nextPage

  • Webhooks available: No

  • Webhook notes: Qualtrics does not offer native webhooks for user management events (user created, updated, deleted). Survey response events can trigger webhooks, but user lifecycle events are not supported.

  • Alternative event strategy: Poll the List Users endpoint periodically to detect changes, or use SCIM provisioning with a supported IdP (Okta, Entra ID) for automated lifecycle management.

SCIM API status

  • SCIM available: Yes

  • SCIM version: 2.0

  • Plan required: Enterprise (requires SSO to be configured first)

  • Endpoint: https://{datacenterid}.qualtrics.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, PUT /Groups/{id}, DELETE /Groups/{id}

Limitations:

  • SSO must be configured and active before SCIM can be enabled.
  • Enterprise plan required; not available on self-serve or lower tiers.
  • Officially documented IdP integrations are Okta and Microsoft Entra ID (Azure AD); other IdPs may require custom SCIM connector configuration.
  • SCIM token is separate from the standard API token and is generated within the SSO/SCIM configuration screen.
  • Group provisioning maps to Qualtrics Divisions or Groups depending on configuration.

Common scenarios

Provisioning a new user requires a POST to /API/v3/users with username (email), firstName, lastName, email, and a valid userType. The userType value must match a type licensed for the brand; invalid values return a 400.

The response returns the Qualtrics user ID (URH_...), which is the required path parameter for all subsequent user-specific calls - email address cannot be substituted. Division assignment requires a follow-up PUT with divisionId.

Deprovisioning should follow a two-step pattern: PUT status: disabled to immediately block access, then optionally DELETE if permanent removal is required by data retention policy.

DELETE behavior - whether it disables or permanently removes the account - varies by brand configuration and should be validated before automation. If SCIM is active, deprovisioning via the IdP triggers the SCIM DELETE or deactivation flow automatically.

For bulk sync via SCIM with Okta or Entra ID, the SCIM bearer token is generated separately within Admin → SSO → SCIM Provisioning. SSO must be fully active before the token generation option appears.

The SCIM endpoint supports GET, POST, PUT, PATCH, and DELETE on /scim/v2/Users, plus group operations that map to Qualtrics Divisions or Groups depending on configuration.

Provision a new employee user account

  1. Authenticate using a Brand Administrator API token.
  2. POST /API/v3/users with required fields: username (email), firstName, lastName, email, userType.
  3. Capture the returned 'id' (URH_...) from the response.
  4. If divisions are used, PUT /API/v3/users/{id} with the appropriate divisionId.
  5. Optionally set accountExpirationDate for contractors or temporary staff.

Watch out for: userType must match a type licensed for your brand. Confirm valid userTypes with your Qualtrics account team or by inspecting existing users via GET /users.

Deprovision a departing employee

  1. Resolve the user's Qualtrics ID by calling GET /API/v3/users and filtering by username/email, or use a stored mapping.
  2. Call PUT /API/v3/users/{userId} with status set to 'disabled' to immediately block access.
  3. Optionally call DELETE /API/v3/users/{userId} if permanent removal is required per your data retention policy.
  4. If SCIM is configured, deprovisioning via the IdP (Okta/Entra) will automatically trigger the SCIM DELETE or deactivation flow.

Watch out for: DELETE behavior (disable vs. permanent removal) may vary by brand configuration. Test in a non-production environment before automating.

Bulk-sync users via SCIM with Okta

  1. Confirm Enterprise plan and active SSO configuration in Qualtrics Admin > SSO.
  2. Navigate to Admin > SSO > SCIM Provisioning and generate a SCIM Bearer Token.
  3. In Okta, add the Qualtrics application from the Okta Integration Network.
  4. Configure the SCIM base URL as https://{datacenterid}.qualtrics.com/scim/v2 and paste the Bearer Token.
  5. Enable provisioning features: Push New Users, Push Profile Updates, Deactivate Users.
  6. Assign users/groups in Okta; Okta will POST /scim/v2/Users for each assigned user.
  7. Verify provisioned users appear in Qualtrics Admin > Users.

Watch out for: The SCIM token is distinct from the REST API token. SSO must be fully active before the SCIM token generation option appears in the admin UI.

Why building this yourself is a trap

The primary integration trap is datacenter-specificity: the base URL is not a single global endpoint. Hardcoding a datacenter ID that differs from the account's actual datacenter produces authentication failures that are easy to misdiagnose as token or permission errors. Always resolve the datacenter ID from the GET /whoami response or a stored, account-verified configuration value.

The REST API uses PUT for user updates - not PATCH. Sending only changed fields in a PUT may overwrite unspecified fields with nulls; include all fields you intend to retain. PATCH is only available via the SCIM endpoint.

This distinction matters when building an identity graph that tracks permission state across users: a partial PUT intended to update divisionId can inadvertently clear the permissions object if the full user record is not reconstructed before the call.

The permissions field is a map of boolean toggles, and its interaction with applied Permission Sets is not fully transparent via the API. A user may have a Permission Set applied at the division level that is not reflected in the per-user permissions object returned by GET.

Any identity graph built on top of the Qualtrics API must account for this layered resolution order - brand default, then division default, then per-user override - to accurately represent effective access state.

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