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

# Project Members

> Add, update, and remove members from a project.

<Warning>
  **Upcoming release — Zylon 1.58**

  These docs are published ahead of release so you can prepare your API integrations. The release image is not yet available. For installations running 1.57, use the [1.57 documentation](/en/v1.57/overview).
</Warning>

<Warning>
  Project member fields and account responses change in 1.58. See [API migration 1.57 → 1.58](/en/v1.58/developer-manual/build-with-zylon/workspace-api/api-migration-1-57-to-1-58#account-ids-and-renamed-fields) before upgrading your integration.
</Warning>

Use project member endpoints to control who can access a project and what role they have. Roles include `Viewer`, `Commenter`, `Editor`, `Admin`, and `Owner`.

Project member responses use the workspace member ID in `id` and include the related account as `account`.

## Basic request and response

List current members with `GET /api/v1/app/project/{projectId}/member`.

<Accordion title="Endpoint parameters">
  | Type | Name | Required | Notes |
  | - | - | - | - |
  | Path | `projectID` | Yes | Project identifier. |
  | Query | `page` | No | Absolute page number to fetch, 1-based. |
  | Query | `page_size` | No | Number of items per page. Default is `20`. |
  | Query | `page_order` | No | `ASC` or `DESC`. Default is `ASC`. |
  | Query | `after` | No | Cursor or value to paginate after. |
  | Query | `before` | No | Cursor or value to paginate before. |
  | Query | `first` | No | Limit to the first N items after a cursor. |
  | Query | `last` | No | Limit to the last N items before a cursor. |
  | Query | `total_count` | No | Include total count in the response. |
</Accordion>

```bash theme={null}
curl "https://{BASE_URL}/api/v1/app/project/{projectID}/member?page=1&page_size=50&total_count=true" \
  -H "Authorization: Bearer {API_TOKEN}" \
  -H "x-org: {org_slug}"
```

<Accordion title="Example response">
  ```json theme={null}
  {
    "data": [
      {
        "id": "{wsMemberId}",
        "role": "Owner",
        "account": {
          "id": "{accountId}",
          "state": "Active",
          "email": "sasha@example.com",
          "name": "Sasha Patel",
          "profile_picture": "https://{BASE_URL}/files/profile-picture.png",
          "provider": "Credentials",
          "roles": ["Workspace"],
          "created_at": "2026-01-10T09:00:00Z",
          "updated_at": "2026-02-08T14:12:45Z"
        },
        "is_project_member": true
      }
    ],
    "has_next_page": false,
    "has_previous_page": false,
    "total_count": 1
  }
  ```
</Accordion>

## Add members

<Accordion title="Endpoint parameters">
  | Type | Name | Required | Notes |
  | - | - | - | - |
  | Path | `projectID` | Yes | Project identifier. |
  | Body | `members` | Yes | Array of members to add. |
  | Body | `members[].ws_member_id` | Yes | Workspace member identifier. |
  | Body | `members[].role` | Yes | `Viewer`, `Commenter`, `Editor`, `Admin`, or `Owner`. |
</Accordion>

```bash theme={null}
curl -X POST "https://{BASE_URL}/api/v1/app/project/{projectID}/member" \
  -H "Authorization: Bearer {API_TOKEN}" \
  -H "x-org: {org_slug}" \
  -H "Content-Type: application/json" \
  -d '{
    "members": [
      { "ws_member_id": "{wsMemberId}", "role": "Editor" }
    ]
  }'
```

<Accordion title="Example response">
  ```json theme={null}
  [
    {
      "id": "{wsMemberId}",
      "role": "Editor",
      "account": {
        "id": "{accountId}",
        "state": "Active",
        "email": "jordan@example.com",
        "name": "Jordan Lee",
        "profile_picture": "https://{BASE_URL}/files/profile-picture.png",
        "provider": "Credentials",
        "roles": ["Workspace"],
        "created_at": "2026-01-10T09:00:00Z",
        "updated_at": "2026-02-07T09:20:12Z"
      },
      "is_project_member": true
    }
  ]
  ```
</Accordion>

## Update member roles

<Accordion title="Endpoint parameters">
  | Type | Name | Required | Notes |
  | - | - | - | - |
  | Path | `projectID` | Yes | Project identifier. |
  | Body | `members` | Yes | Array of members to update. |
  | Body | `members[].ws_member_id` | Yes | Workspace member identifier. |
  | Body | `members[].role` | No | `Viewer`, `Commenter`, `Editor`, `Admin`, or `Owner`. |
  | Body | `members[].is_pinned` | No | Pins or unpins the project for that member. |
</Accordion>

```bash theme={null}
curl -X PUT "https://{BASE_URL}/api/v1/app/project/{projectID}/member" \
  -H "Authorization: Bearer {API_TOKEN}" \
  -H "x-org: {org_slug}" \
  -H "Content-Type: application/json" \
  -d '{
    "members": [
      { "ws_member_id": "{wsMemberId}", "role": "Admin", "is_pinned": true }
    ]
  }'
```

<Accordion title="Example response">
  ```json theme={null}
  [
    {
      "id": "{wsMemberId}",
      "role": "Admin",
      "account": {
        "id": "{accountId}",
        "state": "Active",
        "email": "jordan@example.com",
        "name": "Jordan Lee",
        "profile_picture": "https://{BASE_URL}/files/profile-picture.png",
        "provider": "Credentials",
        "roles": ["Workspace"],
        "created_at": "2026-01-10T09:00:00Z",
        "updated_at": "2026-02-07T09:20:12Z"
      },
      "is_project_member": true
    }
  ]
  ```
</Accordion>

## Get or remove a member

Use `me` in place of `wsMemberId` to target the authenticated workspace member.

<Accordion title="Endpoint parameters">
  | Type | Name | Required | Notes |
  | - | - | - | - |
  | Path | `projectID` | Yes | Project identifier. |
  | Path | `wsMemberId` | Yes | Workspace-member ID, or `me` for the authenticated member. |
</Accordion>

<Tabs>
  <Tab title="Get member">
    ```bash theme={null}
    curl "https://{BASE_URL}/api/v1/app/project/{projectID}/member/{wsMemberId}" \
      -H "Authorization: Bearer {API_TOKEN}" \
      -H "x-org: {org_slug}"
    ```

    <Accordion title="Example response">
      ```json theme={null}
      {
        "id": "{wsMemberId}",
        "role": "Admin",
        "account": {
          "id": "{accountId}",
          "state": "Active",
          "email": "jordan@example.com",
          "name": "Jordan Lee",
          "profile_picture": "https://{BASE_URL}/files/profile-picture.png",
          "provider": "Credentials",
          "roles": ["Workspace"],
          "created_at": "2026-01-10T09:00:00Z",
          "updated_at": "2026-02-07T09:20:12Z"
        },
        "is_project_member": true
      }
      ```
    </Accordion>
  </Tab>

  <Tab title="Remove member">
    ```bash theme={null}
    curl -X DELETE "https://{BASE_URL}/api/v1/app/project/{projectID}/member/{wsMemberId}" \
      -H "Authorization: Bearer {API_TOKEN}" \
      -H "x-org: {org_slug}"
    ```

    <Accordion title="Example response">
      ```json theme={null}
      {
        "id": "{wsMemberId}",
        "role": "Admin",
        "account": {
          "id": "{accountId}",
          "state": "Active",
          "email": "jordan@example.com",
          "name": "Jordan Lee",
          "profile_picture": "https://{BASE_URL}/files/profile-picture.png",
          "provider": "Credentials",
          "roles": ["Workspace"],
          "created_at": "2026-01-10T09:00:00Z",
          "updated_at": "2026-02-07T09:20:12Z"
        },
        "is_project_member": true
      }
      ```
    </Accordion>
  </Tab>
</Tabs>

## Errors and edge cases

* **403**: not allowed to manage members.
* **404**: project or workspace member not found.


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