> This page is for version v1.
> For other versions, use one of these documentation indexes:
> - v2 (default): https://autodesk-poc.ferndocs.com/v2/llms.txt
> - v1: https://autodesk-poc.ferndocs.com/v1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://autodesk-poc.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://autodesk-poc.ferndocs.com/_mcp/server.

# Manage project members

This walkthrough covers the lifecycle of a project member: importing members in
bulk, listing and filtering them, changing their product access, and removing
them.

#### Get a token that can act as a user

Member writes are user-scoped. Use a 3-legged token, or a 2-legged token
plus the `User-Id` header of a project or account admin. See
[Authentication](/v1/authentication).

#### Import the members

`POST projects/:projectId/users:import` adds up to 200 members in one
request. Each entry needs an `email` and the `products` the member should
get, where `access` is `administrator`, `member` or `none`.

**`Request body`**

```json title="Request body"
{
  "users": [
    {
      "email": "member@example.com",
      "companyId": "9e2b1c...",
      "roleIds": ["1a2b3c..."],
      "products": [
        { "key": "projectAdministration", "access": "administrator" },
        { "key": "docs", "access": "member" }
      ]
    }
  ]
}
```

The response reports per-entry success and failure, so a partially valid
batch still imports the valid rows — always inspect `failures` rather than
relying on the status code alone.

#### Confirm the members landed

`GET projects/:projectId/users` lists members. Narrow it with filters and
trim the payload with `fields`:

```http
GET /construction/admin/v1/projects/:projectId/users?filter[status]=active&fields=name,email,status,accessLevels&sort=addedOn%20desc
```

#### Change access or role

`PATCH projects/:projectId/users/:userId` updates a single member — company,
roles and per-product access. Send only the attributes you are changing.

#### Remove a member

`DELETE projects/:projectId/users/:userId` removes the member from the
project. Hub membership is unaffected; use the hub admin operations for that.

## Bulk-inviting across projects

To seed the same people into several projects, call
`POST accounts/:accountId/projects/users:batch-invite` instead of importing
project by project.

## Syncing instead of importing

When an external system owns the membership list, `POST
projects/:projectId/users:sync` reconciles the project against the list you
send, and `POST projects/:projectId/users:sync-status` reports on the resulting
job. The same pattern exists for companies and roles.

> **Info**
>
> New integrations should call the v2 import operation: it takes a pure 2-legged
> token and returns richer per-row errors. See [Migrating to v2](/v1/migrating-to-v2).