---
title: "Resolve workspace users by ID"
method: POST
path: "/workspaces/{workspace_id}/users/batch"
tags: ["User"]
---

# Resolve workspace users by ID

`POST /workspaces/{workspace_id}/users/batch`

Batch-resolve users (current or historic members) within a workspace by their IDs. Users with no association to the workspace are omitted from the result.

## Path parameters

- `workspace_id` string, required

## Request body

- WorkspaceUsersBatchRequest — Request body for batch workspace user resolution
  - `user_ids` string[], required — User IDs to resolve. At most 100 may be requested in a single call.

## Response `200`

The resolved workspace users

- UserQueryResult
  - `users` User[] — All users that matched the query
    - `id` string — Unique identifier representing a specific user
    - `created_time` integer — Time at which the user was created
    - `created_by_id` string — The ID of the user who created this user
    - `desktop_app_installed` boolean — Flag indicating whether or not the user has installed electron app
    - `last_updated_time` integer — Time at which the user was last updated
    - `last_updated_by_id` string — The ID of the user who last updated this user
    - `email` string — The user's E-Mail address
    - `email_verified` boolean — Flag indicating whether or not the user's e-mail address has been verified
    - `name` string — The user's full name
    - `given_name` string — The user's first/given name
    - `family_name` string — The user's surname
    - `nickname` string — The user's nickname
    - `locale` string — The user's locale
    - `picture` string — URL of the user's picture
    - `roles` UserRole[] — This user's roles, scoped to the requested workspace or account
      - `role` 'owner' | 'editor' | 'viewer', required — The possible values for user role
      - `workspace_id` string — The workspace this role applies to. Preferred over `organization_id`. At least one of `workspace_id` or `organization_id` must be present.
      - `organization_id` string — Deprecated alias for `workspace_id`. Retained so legacy callers keep working; new code should use `workspace_id`.
      - `acknowledged_status` 'requires_acknowledgement' | 'acknowledged' — Status marking whether the user has acknowledged the welcome message in the joined workspace
    - `company_roles` UserCompanyRole[] — This user's company roles
      - `role` 'owner' | 'editor' | 'viewer', required — The possible values for user role
      - `company_id` string, required — The company to which this role applies
    - `firebase_token` string — Token to use for Firebase authentication
    - `onboarded` boolean — flag indicating whether the workspace the user has joined has gone through onboarding
    - `accepted_invitation` boolean — flag indicating whether the user has ever accepted invitation to any workspace
    - `preferences` UserPreferences
      - `default_workspace_id` string — The workspace to start in each new session
      - `web_ui_theme` 'standard' | 'dark' — The users preferred theme for the web ui
      - `page_settings` object — The settings to load for specified pages
      - `trainer_type` 'chrome_extension' | 'electron' — The users preferred type for the trainer
      - `customer_view_mode` 'standard' | 'customer' — When set to customer, hides employee-only features for demo purposes
    - `company` string — The user's company
    - `phone` string — The user's phone number
    - `onboarding` UserOnboarding — An object containing the onboarding information for a specific User.
      - `lang_prompt_shown` boolean — Indicates if the user was ever prompted to change the language.
      - `existing_email_domain` boolean — Indicates if the user has an email that matched the registered ones in the CompanyDomain entity, at the moment of the user creation. This is a ReadOnly field that's only filled when the user doesn't have a role in any workspace.
      - `should_create_trial_with_existing_email_domain` boolean — Indicates if a trial workspace should be created even when the email domain matches an existing one.
      - `guided_test_creation` 'complete' | 'skipped' | 'not_started' | 'not_available' | 'incomplete' — Indicates the status of the browser test creation guided tour
      - `guided_run_test_results` 'complete' | 'skipped' | 'not_started' | 'not_available' | 'incomplete' — Indicates the status of the browser test run guided tour
      - `mobile_testing_guide_status` 'complete' | 'skipped' | 'not_started' | 'not_available' | 'incomplete' — Indicates the status of the guided mobile testing experience
    - `type` 'agent' | 'normal' — Classification of the user. A null/unset value is equivalent to `normal` and is the default for existing users. `agent` users are synthetic users created to act on behalf of AI agent sessions that were initiated by an API key rather than a human user.
  - `historic_users` User[] — All users who had historic activity in the workspace, but are no longer users in that workspace. Only populated if include_historic_users is set to true.
    - `id` string — Unique identifier representing a specific user
    - `created_time` integer — Time at which the user was created
    - `created_by_id` string — The ID of the user who created this user
    - `desktop_app_installed` boolean — Flag indicating whether or not the user has installed electron app
    - `last_updated_time` integer — Time at which the user was last updated
    - `last_updated_by_id` string — The ID of the user who last updated this user
    - `email` string — The user's E-Mail address
    - `email_verified` boolean — Flag indicating whether or not the user's e-mail address has been verified
    - `name` string — The user's full name
    - `given_name` string — The user's first/given name
    - `family_name` string — The user's surname
    - `nickname` string — The user's nickname
    - `locale` string — The user's locale
    - `picture` string — URL of the user's picture
    - `roles` UserRole[] — This user's roles, scoped to the requested workspace or account
      - `role` 'owner' | 'editor' | 'viewer', required — The possible values for user role
      - `workspace_id` string — The workspace this role applies to. Preferred over `organization_id`. At least one of `workspace_id` or `organization_id` must be present.
      - `organization_id` string — Deprecated alias for `workspace_id`. Retained so legacy callers keep working; new code should use `workspace_id`.
      - `acknowledged_status` 'requires_acknowledgement' | 'acknowledged' — Status marking whether the user has acknowledged the welcome message in the joined workspace
    - `company_roles` UserCompanyRole[] — This user's company roles
      - `role` 'owner' | 'editor' | 'viewer', required — The possible values for user role
      - `company_id` string, required — The company to which this role applies
    - `firebase_token` string — Token to use for Firebase authentication
    - `onboarded` boolean — flag indicating whether the workspace the user has joined has gone through onboarding
    - `accepted_invitation` boolean — flag indicating whether the user has ever accepted invitation to any workspace
    - `preferences` UserPreferences
      - `default_workspace_id` string — The workspace to start in each new session
      - `web_ui_theme` 'standard' | 'dark' — The users preferred theme for the web ui
      - `page_settings` object — The settings to load for specified pages
      - `trainer_type` 'chrome_extension' | 'electron' — The users preferred type for the trainer
      - `customer_view_mode` 'standard' | 'customer' — When set to customer, hides employee-only features for demo purposes
    - `company` string — The user's company
    - `phone` string — The user's phone number
    - `onboarding` UserOnboarding — An object containing the onboarding information for a specific User.
      - `lang_prompt_shown` boolean — Indicates if the user was ever prompted to change the language.
      - `existing_email_domain` boolean — Indicates if the user has an email that matched the registered ones in the CompanyDomain entity, at the moment of the user creation. This is a ReadOnly field that's only filled when the user doesn't have a role in any workspace.
      - `should_create_trial_with_existing_email_domain` boolean — Indicates if a trial workspace should be created even when the email domain matches an existing one.
      - `guided_test_creation` 'complete' | 'skipped' | 'not_started' | 'not_available' | 'incomplete' — Indicates the status of the browser test creation guided tour
      - `guided_run_test_results` 'complete' | 'skipped' | 'not_started' | 'not_available' | 'incomplete' — Indicates the status of the browser test run guided tour
      - `mobile_testing_guide_status` 'complete' | 'skipped' | 'not_started' | 'not_available' | 'incomplete' — Indicates the status of the guided mobile testing experience
    - `type` 'agent' | 'normal' — Classification of the user. A null/unset value is equivalent to `normal` and is the default for existing users. `agent` users are synthetic users created to act on behalf of AI agent sessions that were initiated by an API key rather than a human user.
  - `cursor` string — Cursor used for pagination

## Other responses

- `400` — Invalid request - more than 100 user IDs requested, or no IDs provided
- `401` — User not authenticated
- `403` — User not authorized
- `default` — Unknown error

---

[API](https://skmtc.net/mabl/apis/mabl-api.md) · [All operations](https://skmtc.net/mabl/apis/mabl-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mabl/mabl-api/revisions/d0fc0114da66/schema)
