> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Internal links on these pages omit the .md extension. Append .md to a docs page URL, or send an Accept: text/markdown header, to get that page as markdown.

# List workspace members

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



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json post /api/workspace/members/list
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/workspace/members/list:
    post:
      summary: List workspace members
      description: >-
        <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>
      operationId: list_members_api_workspace_members_list_post
      parameters:
        - name: workspaceId
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                minLength: 1
              - type: 'null'
            description: >-
              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).
            title: Workspaceid
          description: >-
            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).
          example: 67e0b12c4d8a3f005b21c9e4
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MembersListRequest'
      responses:
        '200':
          description: One page of members.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MembersListPage'
        '400':
          description: You left out `workspaceId` and your session has no active workspace.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            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':
          description: Your workspace requires an unlocked SSO session.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: Rate limit exceeded.
components:
  schemas:
    MembersListRequest:
      properties:
        search:
          anyOf:
            - type: string
              maxLength: 256
            - type: 'null'
          title: Search
          description: >-
            Text to match, ignoring case, anywhere in a member's email, name,
            role, or status.
          example: acme.com
        search_terms:
          anyOf:
            - items:
                type: string
                maxLength: 256
              type: array
              maxItems: 200
            - type: 'null'
          title: Search Terms
          description: >-
            More text to match the same way as `search`, up to 200 terms. A
            member matches when any term does.
          example:
            - dana@acme.com
            - sam@acme.com
        sort_by:
          anyOf:
            - type: string
              enum:
                - member
                - credits
                - apps
                - agents
                - last_active
                - role
            - type: 'null'
          title: Sort By
          description: >-
            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`.
          example: last_active
        sort_dir:
          anyOf:
            - type: string
              enum:
                - asc
                - desc
            - type: 'null'
          title: Sort Dir
          description: Sort direction. Needs `sort_by`.
          example: desc
        roles:
          anyOf:
            - items:
                type: string
              type: array
              maxItems: 20
            - type: 'null'
          title: Roles
          description: >-
            Only members with one of these roles: `owner`, `admin`, `editor`,
            `viewer`, or `guest`.
          example:
            - admin
            - editor
        invite_statuses:
          anyOf:
            - items:
                type: string
                enum:
                  - joined
                  - pending
                  - expired
              type: array
              maxItems: 3
            - type: 'null'
          title: Invite Statuses
          description: >-
            Only people in one of these states: `joined`, `pending` (invited and
            not yet joined), or `expired` (the invitation lapsed).
          example:
            - joined
        credit_limit_set:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Credit Limit Set
          description: >-
            `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.
          example: true
        apps_owned:
          anyOf:
            - $ref: '#/components/schemas/MembersNumberRangeFilter'
            - type: 'null'
          description: Only members whose `apps_owned` plus `apps_shared` is in this range.
        agents_owned:
          anyOf:
            - $ref: '#/components/schemas/MembersNumberRangeFilter'
            - type: 'null'
          description: >-
            Only members whose `agents_owned` plus `agents_shared` is in this
            range.
        last_active:
          anyOf:
            - $ref: '#/components/schemas/MembersDateRangeFilter'
            - type: 'null'
          description: >-
            Only members whose `last_active` is in this range. Members who never
            used credits don't match.
        cursor:
          anyOf:
            - type: string
              maxLength: 256
            - type: 'null'
          title: Cursor
          description: >-
            `next_cursor` from the previous page. Leave it out for the first
            page.
          example: NTA=
        page_size:
          type: integer
          maximum: 100
          minimum: 1
          title: Page Size
          description: How many people to return, 1 to 100. Defaults to 50.
          default: 50
          example: 50
      additionalProperties: false
      type: object
      title: MembersListRequest
      description: One page of a members list.
    MembersListPage:
      properties:
        members:
          items:
            $ref: '#/components/schemas/WorkspaceMemberRow'
          type: array
          title: Members
          description: The people on this page.
          example:
            - access_state: granted
              agents_owned: 1
              agents_shared: 0
              apps_owned: 4
              apps_shared: 0
              assigned_via: direct
              credit_limit: 500
              credits_used: 128.5
              email: dana@acme.com
              full_name: Dana Levi
              is_default_limit: false
              last_active: '2026-10-03T14:12:08.512000'
              last_seen: '2026-10-05T08:41:22.004000'
              role: editor
              status: active
              user_id: 66f1c2a9b7e3d4001f8a2c55
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
          title: Next Cursor
          description: Pass as `cursor` to get the next page. `null` on the last page.
          example: NTA=
        has_more:
          type: boolean
          title: Has More
          description: '`true` when there''s another page.'
          default: false
          example: true
        total:
          type: integer
          title: Total
          description: Number of people matching the filters, across all pages.
          default: 0
          example: 137
        monthly_limit:
          anyOf:
            - type: integer
            - type: 'null'
          title: Monthly Limit
          description: The workspace's monthly credits, or `null` when they're unlimited.
          example: 10000
        default_member_credit_limit:
          anyOf:
            - type: integer
            - type: 'null'
          title: Default Member Credit Limit
          description: >-
            The workspace's default member credit limit, or `null` when none is
            set.
          example: 300
      type: object
      required:
        - members
        - next_cursor
        - has_more
        - total
        - monthly_limit
        - default_member_credit_limit
      title: MembersListPage
      description: One page of workspace members.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    MembersNumberRangeFilter:
      properties:
        gte:
          anyOf:
            - type: number
            - type: 'null'
          title: Gte
          description: Lowest count to include.
          example: 1
        lte:
          anyOf:
            - type: number
            - type: 'null'
          title: Lte
          description: Highest count to include.
          example: 10
      additionalProperties: false
      type: object
      title: MembersNumberRangeFilter
      description: Inclusive bounds on a count. Set either bound, or both.
    MembersDateRangeFilter:
      properties:
        gte:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Gte
          description: Earliest time to include, in ISO 8601.
          example: '2026-09-01T00:00:00Z'
        lte:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Lte
          description: Latest time to include, in ISO 8601.
          example: '2026-09-30T23:59:59Z'
      additionalProperties: false
      type: object
      title: MembersDateRangeFilter
      description: Inclusive bounds on a time. Set either bound, or both.
    WorkspaceMemberRow:
      properties:
        email:
          type: string
          title: Email
          description: >-
            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.
          example: dana@acme.com
        full_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Full Name
          description: >-
            Full name, or `null` when there isn't one, as for an invitee without
            a Base44 account.
          example: Dana Levi
        user_id:
          anyOf:
            - type: string
            - type: 'null'
          title: User Id
          description: >-
            ID of the person's Base44 account, or `null` for an invitee without
            one.
          example: 66f1c2a9b7e3d4001f8a2c55
        role:
          type: string
          title: Role
          description: >-
            Role in the workspace: `owner`, `admin`, `editor`, `viewer`, or
            `guest`.
          example: editor
        status:
          type: string
          title: Status
          description: >-
            `active` for a member, `pending` for someone invited who hasn't
            joined.
          example: active
        assigned_via:
          type: string
          title: Assigned Via
          description: >-
            `group` when a group grants the role, so it can only change at the
            group. `direct` otherwise.
          default: direct
          example: direct
        access_state:
          type: string
          title: Access State
          description: >-
            `blocked` when a group with no access blocks the member, so `role`
            grants nothing. `granted` otherwise.
          default: granted
          example: granted
        invitation_expires_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Invitation Expires At
          description: >-
            When a pending invitation expires, in ISO 8601 UTC without an
            offset. `null` for members who joined.
          example: '2026-12-04T09:30:00'
        credits_used:
          anyOf:
            - type: number
            - type: 'null'
          title: Credits Used
          description: >-
            Credits the member used in the workspace this month. `null` on other
            members' rows when you aren't an owner or admin.
          example: 128.5
        credit_limit:
          anyOf:
            - type: integer
            - type: 'null'
          title: Credit Limit
          description: >-
            The member's monthly credit limit, their own or the workspace
            default. `null` when neither is set.
          example: 500
        is_default_limit:
          type: boolean
          title: Is Default Limit
          description: '`true` when `credit_limit` is the workspace default.'
          default: false
          example: false
        apps_owned:
          type: integer
          title: Apps Owned
          description: Apps the member owns in the workspace.
          default: 0
          example: 4
        agents_owned:
          type: integer
          title: Agents Owned
          description: Agents the member owns in the workspace.
          default: 0
          example: 1
        apps_shared:
          type: integer
          title: Apps Shared
          description: >-
            Apps a guest was invited to collaborate on. Always `0` for other
            roles.
          default: 0
          example: 0
        agents_shared:
          type: integer
          title: Agents Shared
          description: >-
            Agents a guest was invited to collaborate on. Always `0` for other
            roles.
          default: 0
          example: 0
        last_active:
          anyOf:
            - type: string
            - type: 'null'
          title: Last Active
          description: >-
            When the member last used credits in the workspace, in ISO 8601 UTC
            without an offset, or `null` if never.
          example: '2026-10-03T14:12:08.512000'
        last_seen:
          anyOf:
            - type: string
            - type: 'null'
          title: Last Seen
          description: >-
            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.
          example: '2026-10-05T08:41:22.004000'
      type: object
      required:
        - email
        - full_name
        - user_id
        - role
        - status
        - assigned_via
        - access_state
        - invitation_expires_at
        - credits_used
        - credit_limit
        - is_default_limit
        - apps_owned
        - agents_owned
        - apps_shared
        - agents_shared
        - last_active
        - last_seen
      title: WorkspaceMemberRow
      description: A member or pending invitee of the workspace.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.