---
title: "List project members"
method: GET
path: "/v2/projects/{project_id}/members"
tags: ["members"]
---

# List project members

`GET /v2/projects/{project_id}/members`

## Request

- Base URL: `https://api.hubstaff.com`
- URL: `https://api.hubstaff.com/v2/projects/{project_id}/members`
- Auth: OAuth 2
  - Authorization code: `https://account.hubstaff.com/authorizations/new`
  - Token URL: `https://account.hubstaff.com/access_tokens` scopes: `hubstaff:read`, `hubstaff:write`
- TypeScript: <https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/docs/v2/projects/:project_id/members/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns a collection of members for the given project.

Results can be filtered by search, user IDs, membership role, and date range.


*membership_role* - The permission role the member has in this project
- *manager* - An manager can track time, see data for any member within the project, can change settings, and manage membership within the project
- *user* - A user can track time against the project and see only their own data within the project
- *viewer* - A viewer can access reports based on data for any member within the project but can not change anything

**Note**: A member must have membership within a project in order to track on that project, even if they are an organization owner or manager

**Filtering by dates:**

You can filter members by when they were added to the project using the `created_at` parameter:
- Use `created_at[start]` to get members added on or after a specific date
- Use `created_at[stop]` to get members added before a specific date
- Use both to get members added within a date range

You can also filter by when membership was last updated using the `updated_at` parameter:
- Use `updated_at[start]` to get members updated on or after a specific date
- Use `updated_at[stop]` to get members updated before a specific date
- Use both to get members updated within a date range

## Path parameters

- `project_id` integer, required

## Query parameters

- `page_start_id` integer
- `page_limit` integer
- `search[email]` string
- `search[name]` string
- `include_removed` boolean
- `include_profile` boolean
- `direct_only` boolean
- `membership_roles` string[]
- `created_at[start]` string, date-time
- `created_at[stop]` string, date-time
- `updated_at[start]` string, date-time
- `updated_at[stop]` string, date-time
- `user_ids` integer[]
- `include` string[]

## Response `200`

A list of members

- object
  - `members` ProjectMember[]
    - `user_id` integer, required: User ID
    - `pay_rate` string: Pay rate
    - `bill_rate` string: Bill rate
    - `currency` string: Currency of pay and bill rates
    - `membership_role` string, required: Membership role
    - `membership_status` string, required: Membership status
    - `created_at` string, date-time, required: When the member was added to the organization/project
    - `updated_at` string, date-time, required: When the membership was last updated
    - `removed_at` string, date-time: When the member was removed
    - `last_client_activity` string, date-time, required: Last client activity of user
    - `team_id` integer: Team ID
    - `profile` OrganizationMemberProfile
      - `job_title` string: The job title of the member
      - `job_type` string: The job type of the member
      - `location` string: The location of the member
      - `employee_id` string: The employee id of the member
      - `tax_info` string: The tax info of the member
      - `birthday` string, date: The member's birthday (YYYY-MM-DD). If the year is not available, it will be 0000
      - `started_on` string, date: The start date of the member
      - `custom_fields` object: Custom fields
      - `work_phone` string: The work phone number of the member
      - `personal_phone` string: The personal phone number of the member
      - `personal_email` string: The personal email address of the member
      - `department` string: The department of the member
      - `tax_type` string: The tax type of the member
      - `occupied_seat` boolean: Whether the member occupies a billing seat
      - `os_username` string: The OS username of the member
      - `employment_type` string: The employment type of the member
      - `work_mode` string: The workplace mode of the member
      - `in_office_percent` integer: The in-office work percentage of the member
      - `remote_percent` integer: The remote work percentage of the member
      - `employed_through` string: How the member is employed
      - `eor_name` string: The EOR or vendor name of the member
      - `account_code` string: The account code of the member
      - `employment_comments` string: Employment comments for the member
      - `contractual_end_date` string, date: The contractual end date of the member
      - `termination_reason` string: The termination reason of the member
      - `home_address` string: The home address of the member
      - `home_address_country` string: The home address country of the member
      - `home_address_state` string: The home address state of the member
      - `work_address` string: The work address of the member
      - `work_address_country` string: The work address country of the member
      - `work_address_state` string: The work address state of the member

## Other responses

- `400`: Invalid parameters
- `401`: Unauthorized
- `403`: API access is only for organizations on an active plan
- `404`: Could not find record
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api.md) - [All operations](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/revisions/c6b90e4e4bdc?raw)
