--- title: "Add a user with project-level access" slug: "add-a-user-with-project-level-access" description: "Invite new users with project-level access using the v3 API. Learn to assign roles and send invitations seamlessly for effective project collaboration." updated: 2026-09-05T18:36:53Z published: 2026-09-05T18:36:53Z canonical: "apidocs.document360.com/add-a-user-with-project-level-access" --- > ## Documentation Index > Fetch the complete documentation index at: https://apidocs.document360.com/llms.txt > Use this file to discover all available pages before exploring further. # Add a user with project-level access You can use the v3 API to invite a new user with project-level access — meaning a content role that applies across the entire project. ## Before you begin You need your `project_id`, plus the role IDs to assign. List the available roles and note the portal role ID and content role ID you want. ``` GET /v3/projects/{project_id}/users/roles ``` Each role has a `role_type` of `PortalRole` or `ContentRole`. You need one portal role ID and one content role ID. ## Add the user Send a `POST` request. Set the content permission's `access_scope.access_level` to `project` for project-wide access. An invitation email is sent to the new member. ``` POST /v3/projects/{project_id}/users ``` ``` curl --request POST "https://apihub.document360.io/v3/projects/{project_id}/users" \ --header "X-API-Key: YOUR_API_KEY" \ --header "Content-Type: application/json" \ --data '{ "email": "new.user@example.com", "first_name": "Jane", "last_name": "Doe", "invited_by": "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d", "associated_portal_role_id": "f6a7b8c9-d0e1-2f3a-4b5c-6d7e8f9a0b1c", "content_permissions": [ { "associated_content_role_id": "a7b8c9d0-e1f2-3a4b-5c6d-7e8f9a0b1c2d", "access_scope": { "access_level": "project" } } ], "associated_groups": ["b8c9d0e1-f2a3-4b5c-6d7e-8f9a0b1c2d3e"] }' ``` | Field | Required | Description | | --- | --- | --- | | `email` | Yes | Email address of the invitee. | | `associated_portal_role_id` | Yes | Portal role ID. | | `content_permissions` | Yes | One or more content role and access-scope pairs. | | `invited_by` | Yes, with an API key | The user sending the invitation. Required when authenticating with `X-API-Key`. Ignored when using a user access token (OAuth). | | `first_name` / `last_name` | No | Name of the invitee. | | `associated_groups` | No | User group IDs to add the member to. | | `is_sso_user` / `scheme_name` | No | Set for SSO users; `scheme_name` is required when `is_sso_user` is `true`. | Note `access_level` accepts `none`, `category`, `version`, `project`, `language`, `article` and `workspace`. Use `project` for project-wide access. A successful request returns `201 Created` with the new user's ID: ``` { "success": true, "request_id": "req_abc123def456", "data": { "user_id": "6c1d2e3f-a4b5-4c6d-e7f8-a9b0c1d2e3f4" } } ``` Note Requires the **Manage roles, accounts and groups** permission. A non-Owner cannot invite an Owner, which returns `403`. Important This endpoint is part of the premium API add-on. If it is not enabled for your project, the request returns `403` with the error code `PREMIUM_FEATURE_NOT_IN_LICENSE`. If your plan's user seats are exhausted, the request returns `403` with `LICENSE_LIMIT_EXCEEDED`. ## Related - [Add a reader with project-level access](/add-a-reader-with-project-level-access.md) - [Create a user](/create-a-user.md) - [Create a reader](/create-a-reader.md)