---
title: "List workspace members"
method: POST
path: "/api/workspace/members/list"
---

# List workspace members

`POST /api/workspace/members/list`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns one page of a workspace's members and pending invitations, with each person's role, credit use, credit limit, and the apps and agents they have.

Filter with `roles`, `invite_statuses`, `credit_limit_set`, `apps_owned`, `agents_owned`, and `last_active`. A member must match every filter you set. `search` and `search_terms` match part of an email, name, role, or status, and a member matches when any term does.

Set both `sort_by` and `sort_dir` to sort. Otherwise, and to break ties, joined members come before pending invitations, then by role from owner to guest, then by email. Sorting by `last_active` puts members who never used credits last in either direction.

To page, send the same body with `cursor` set to the previous response's `next_cursor`, until `has_more` is `false`. `total` counts every match. A `cursor` that Base44 didn't return starts again from the first page.

Owners and admins see everyone's `credits_used` and `last_seen`. Other members see them only on their own row and get `null` for everyone else, and sorting by `credits` falls back to the default order for them. Active guests with a Base44 staff email aren't listed.

<Warning>Results come from a cached copy that lasts 2 minutes for workspaces up to 200 people, 15 minutes up to 10,000, and 30 minutes above that, so `credits_used`, `last_active`, and `last_seen` can be that old. Changing members through Base44 starts a fresh copy, and positions in it can shift, so a page read with an older `cursor` can skip or repeat people. After you change members, page again from the start.</Warning>

This is limited to 30 requests per minute. A signed-in session has its own limit, and every personal access token for the workspace shares one. Some workspaces have a different limit.

<Note>Call this as any member of the workspace other than a guest, with a personal access token for that workspace sent as a Bearer token, or from a signed-in session. Read-only tokens work. Workspace API keys aren't accepted.</Note>

## Query parameters

- `workspaceId` string, nullable — ID of the workspace. With a personal access token, use the token's workspace, which is also the default. From a signed-in session it defaults to your active workspace. Get it from `organization_id` in [Get app](/api-reference/get-app).

## Request body

- MembersListRequest — One page of a members list.
  - `search` string, nullable — Text to match, ignoring case, anywhere in a member's email, name, role, or status.
  - `search_terms` string[], nullable — More text to match the same way as `search`, up to 200 terms. A member matches when any term does.
  - `sort_by` 'member' | 'credits' | 'apps' | 'agents' | 'last_active' | 'role', nullable — Column to sort by: `member` (name, or email when there's no name), `credits` (`credits_used`), `apps` and `agents` (owned plus shared), `last_active`, or `role` (owner, admin, editor, viewer, guest). Needs `sort_dir`.
  - `sort_dir` 'asc' | 'desc', nullable — Sort direction. Needs `sort_by`.
  - `roles` string[], nullable — Only members with one of these roles: `owner`, `admin`, `editor`, `viewer`, or `guest`.
  - `invite_statuses` string[], nullable — Only people in one of these states: `joined`, `pending` (invited and not yet joined), or `expired` (the invitation lapsed).
  - `credit_limit_set` boolean, nullable — `true` for only members with their own credit limit, `false` for only members without one. A member on the workspace default counts as not having their own.
  - `apps_owned` MembersNumberRangeFilter — Inclusive bounds on a count. Set either bound, or both.
    - `gte` number, nullable — Lowest count to include.
    - `lte` number, nullable — Highest count to include.
  - `agents_owned` MembersNumberRangeFilter — Inclusive bounds on a count. Set either bound, or both.
    - `gte` number, nullable — Lowest count to include.
    - `lte` number, nullable — Highest count to include.
  - `last_active` MembersDateRangeFilter — Inclusive bounds on a time. Set either bound, or both.
    - `gte` string, date-time, nullable — Earliest time to include, in ISO 8601.
    - `lte` string, date-time, nullable — Latest time to include, in ISO 8601.
  - `cursor` string, nullable — `next_cursor` from the previous page. Leave it out for the first page.
  - `page_size` integer — How many people to return, 1 to 100. Defaults to 50.

## Response `200`

One page of members.

- MembersListPage — One page of workspace members.
  - `members` WorkspaceMemberRow[], required — The people on this page.
    - `email` string, required — Email of the member or invitee, in the casing it was added with. Pass it as is to the endpoints that take a member's email.
    - `full_name` string, nullable, required — Full name, or `null` when there isn't one, as for an invitee without a Base44 account.
    - `user_id` string, nullable, required — ID of the person's Base44 account, or `null` for an invitee without one.
    - `role` string, required — Role in the workspace: `owner`, `admin`, `editor`, `viewer`, or `guest`.
    - `status` string, required — `active` for a member, `pending` for someone invited who hasn't joined.
    - `assigned_via` string, required — `group` when a group grants the role, so it can only change at the group. `direct` otherwise.
    - `access_state` string, required — `blocked` when a group with no access blocks the member, so `role` grants nothing. `granted` otherwise.
    - `invitation_expires_at` string, nullable, required — When a pending invitation expires, in ISO 8601 UTC without an offset. `null` for members who joined.
    - `credits_used` number, nullable, required — Credits the member used in the workspace this month. `null` on other members' rows when you aren't an owner or admin.
    - `credit_limit` integer, nullable, required — The member's monthly credit limit, their own or the workspace default. `null` when neither is set.
    - `is_default_limit` boolean, required — `true` when `credit_limit` is the workspace default.
    - `apps_owned` integer, required — Apps the member owns in the workspace.
    - `agents_owned` integer, required — Agents the member owns in the workspace.
    - `apps_shared` integer, required — Apps a guest was invited to collaborate on. Always `0` for other roles.
    - `agents_shared` integer, required — Agents a guest was invited to collaborate on. Always `0` for other roles.
    - `last_active` string, nullable, required — When the member last used credits in the workspace, in ISO 8601 UTC without an offset, or `null` if never.
    - `last_seen` string, nullable, required — When the member last used Base44 in this workspace, in ISO 8601 UTC without an offset, or `null` if not recorded. `null` on other members' rows when you aren't an owner or admin.
  - `next_cursor` string, nullable, required — Pass as `cursor` to get the next page. `null` on the last page.
  - `has_more` boolean, required — `true` when there's another page.
  - `total` integer, required — Number of people matching the filters, across all pages.
  - `monthly_limit` integer, nullable, required — The workspace's monthly credits, or `null` when they're unlimited.
  - `default_member_credit_limit` integer, nullable, required — The workspace's default member credit limit, or `null` when none is set.

## Other responses

- `400` — You left out `workspaceId` and your session has no active workspace.
- `401` — Missing or invalid credentials.
- `403` — You aren't a member of the workspace, you're a guest, your token is for a different workspace, or your credential can't be used on this endpoint.
- `409` — Your workspace requires an unlocked SSO session.
- `422` — Validation Error
- `429` — Rate limit exceeded.

## Changes

> 28 revisions in range; 1 not diffed.

- **2026-10-06** `dddf17e0f9f0` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/workspace/members/list/post.md)

---

[API](https://skmtc.dev/adexad/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/adexad/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adexad/apis/base44-app-management-api/revisions/99df85f579f9?raw)
