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",
"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. |
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. |
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" }
}
Requires the Manage roles, accounts and groups permission. A non-Owner cannot invite an Owner, which returns 403.
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.