Project API
Manage project access controls using the Project Management REST API
The Project API allows you to manage access controls for projects in BrowserStack. You can list, grant, update, and revoke access for users and teams across your projects.
List all project accesses
Retrieve a paginated list of all users and teams who have access to a specific project.
Request parameters
Request
curl -u "YOUR_USERNAME:YOUR_ACCESS_KEY" \
-X GET "https://api.browserstack.com/v1/projects/:pid/accesses?page=1&per_page=30"
-
pid* string
The unique identifier of the project
-
page integer
Page number for pagination (default is 1)
-
per_page integer
Number of records per page (default is 20, max is 100)
Response attributes 200 application/json
Response
{
"info": {
"prev": 1,
"next": 2,
"page": 1,
"page_size": 30,
"count": 4
},
"accesses":[
// user with project role override
{ "accessor_type": "user", "name": "Jane Doe", "email": "jane@gmail.com", "overriden_role": "Admin", "assigned_at": "2025-12-16T10:30:00Z", "appplicable_role": "Admin" },
// user without project role override
{ "accessor_type": "user", "name": "Jean", "email": "jean@gmail.com", "overriden_role": null, "assigned_at": "2025-12-16T10:30:00Z", "applicable_role": "User" },
// team with project role override for all members of the team (excluding global viewers and users with explicit access), no applicable_role
{ "accessor_type": "team", "name": "External stuff", "overriden_role": "Viewer", "assigned_at": "2025-12-16T10:30:00Z" },
// team without project role override, no applicable_role
{ "accessor_type": "team", "name": "Some team", "overriden_role": null, "assigned_at": "2025-12-16T10:30:00Z" },
// custom role "ABC DEF custom role"
{ "accessor_type": "team", "name": "Some team", "overriden_role": "ABC DEF custom role", "assigned_at": "2025-12-16T10:30:00Z" },
]
}
-
info Object
â–¶ SHOW VALUESPagination and count information
-
prev Integer
Previous page number
-
next Integer
Next page number
-
page Integer
Current page number
-
page_size Integer
Number of records per page
-
count Integer
Total number of access entries
-
-
accesses Array
â–¶ SHOW VALUESList of access entries for the project
-
accessor_type String
Type of access entity (user or team)
-
name String
Name of the user or team
-
email String
Email address (for users only)
-
overriden_role String
Project-level role override (if any)
-
assigned_at String
Timestamp when access was assigned (ISO 8601)
-
applicable_role String
Effective role for the user (for users only)
-
access Boolean
Whether the entity has access to the project
-
Get project accesses for specific users or teams
Check access status for specific users or teams on a project. This helps you verify whether particular users or teams have access and how they obtained it.
Request parameters
Request
curl -u "YOUR_USERNAME:YOUR_ACCESS_KEY" \
-X GET "https://api.browserstack.com/v1/projects/:pid/accesses?user_emails=[jane@gmail.com,abc@gmail.com]&team_names=[team-456,team-789]
" \
-H "Content-Type: application/json" \
-d '{
user_emails: [jane@gmail.com,abc@gmail.com],
team_names: [abc,def]
}'
-
pid* string
The unique identifier of the project
-
user_email array
List of comma separated user email addresses
-
team_names array
List of comma separated team names
Response attributes 200 application/json
Response
[
"page_info": {
"prev": 1,
"next": 2,
"page": 1,
"page_size": 30,
"count": 1963
},
"accesses": [
// user with project role override
{ "accessor_type": "user", "name": "Jane Doe", "email": "jane@gmail.com", "overriden_role": "Admin", "assigned_at": "2025-12-16T10:30:00Z", "applicable_role": "Admin", "access": true },
// user without project role override
{ "accessor_type": "user", "name": "Jean", "email": "abc@gmail.com", "overriden_role": null, "assigned_at": "2025-12-16T10:30:00Z", "applicable_role": "User", "access": true },
// user without access to project
{ "accessor_type": "user", "name": "Jean", "email": "abc@gmail.com", "access": false },
// team with project role override for all members of the team (excluding global viewers and users with explicit access)
{ "accessor_type": "team", "name": "External stuff", "overriden_role": "Viewer", "assigned_at": "2025-12-16T10:30:00Z", "access": true },
// team without project role override
{ "accessor_type": "team", "name": "Some team", "overriden_role": null, "assigned_at": "2025-12-16T10:30:00Z", "access": true },
// team without project access
{ "accessor_type": "team", "name": "Some team", "access": false },
]
}
-
page_info Object
â–¶ SHOW VALUESPagination and count information
-
prev Integer
Previous page number
-
next Integer
Next page number
-
page Integer
Current page number
-
page_size Integer
Number of records per page
-
count Integer
Total number of access entries
-
-
accesses Array
â–¶ SHOW VALUESList of access details for users and teams
-
accessor_type String
Type of access entity (user or team)
-
name String
Name of the user or team
-
email String
Email address (for users only)
-
overriden_role String
Project-level role override (if any)
-
assigned_at String
Timestamp when access was assigned (ISO 8601)
-
applicable_role String
Effective role for the user (for users only)
-
access Boolean
Whether the entity has access to the project
-
Bulk update project accesses
Grant or revoke access for multiple users and teams in a single request. This is useful when you need to update permissions for several entities at once.
Request parameters
Request
curl -u "YOUR_USERNAME:YOUR_ACCESS_KEY" \
-X PUT "https://api.browserstack.com/v1/projects/:pid/accesses" \
-H "Content-Type: application/json" \
-d '[
{
"accessor_type": "user",
"email": "jane@gmail.com",
"overriden_role": "Admin"
},
{
"accessor_type": "user",
"email": "jean@gmail.com"
},
{
"accessor_type": "team",
"name": "External stuff",
"overriden_role": "Viewer"
},
{
"accessor_type": "team",
"name": "Some team"
}
]'
-
pid* string
The unique identifier of the project
-
accesses* Array
â–¶ SHOW VALUESList of access updates to apply
-
accessor_type String
Type of accessor (user or team)
-
email String
Email of the user (present when accessor_type is user)
-
name String
Name of the team (present when accessor_type is team)
-
overriden_role String
Project-level role override applied to the accessor (if provided)
-
Response attributes 200 application/json
Response
[
{ "accessor_type": "user", "email": "jane@gmail.com", "message": "successfully added", "status": 200 },
{ "accessor_type": "user", "email": "jean@gmail.com", "message": "user not found", "status": 200 },
{ "accessor_type": "team", "name": "some team", "message": "team not found", "status": 404 }
]
-
success Boolean
Indicates if the request was successful
-
data Object
â–¶ SHOW VALUESContains the response data
-
results Array
â–¶ SHOW VALUESList of results for each access entry
-
accessor_type String
Type of accessor (user or team)
-
email String
Email of the user (if accessor_type is user)
-
name String
Name of the team (if accessor_type is team)
-
message String
Result message for the access entry
-
status Integer
HTTP status code for the access entry
-
-
Revoke project accesses
Remove access for specific users or teams from a project. Once access is revoked, these entities will no longer be able to view or modify the project.
Request parameters
Request
curl -u "YOUR_USERNAME:YOUR_ACCESS_KEY" \
-X DELETE "https://api.browserstack.com/v1/projects/:pid/accesses" \
-H "Content-Type: application/json" \
-d '[
{
"accessor_type": "user",
"email": "jane@gmail.com"
},
{
"accessor_type": "team",
"name": "External"
}
]'
-
pid* string
The unique identifier of the project
-
accesses* Array
â–¶ SHOW VALUESList of access entities to revoke
-
user_emails Array[String]
List of user email addresses to grant access
-
team_names Array[String]
List of team names to grant access
-
Response attributes 200 application/json
Response
[
{ "accessor_type": "user", "email": "jane@gmail.com", "message": "successfully added", "status": 200 },
{ "accessor_type": "team", "name": "some team", "message": "team not found", "status": 404 }
]
-
accesses Array
â–¶ SHOW VALUESList of results for each access entry
-
accessor_type string
Type of accessor (user or team)
-
email string
Email of the user (if accessor_type is user)
-
name string
Name of the team (if accessor_type is team)
-
message string
Result message for the access entry
-
status integer
HTTP status code for the access entry
-
We're sorry to hear that. Please share your feedback so we can do better
Contact our Support team for immediate help while we work on improving our docs.