Skip to main content
No Result Found
Connect & Get help from fellow developers on our Discord community. Ask the CommunityAsk the Community

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

GET https://api.browserstack.com/v1/projects/:pid/accesses?page=1&per_page=30

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

    Pagination and count information

    â–¶ SHOW VALUES
    • 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

    List of access entries for the project

    â–¶ SHOW VALUES
    • 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

GET https://api.browserstack.com/v1/projects/:pid/accesses?user_emails&team_names

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

    Pagination and count information

    â–¶ SHOW VALUES
    • 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

    List of access details for users and teams

    â–¶ SHOW VALUES
    • 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

PUT https://api.browserstack.com/v1/projects/:pid/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

    List of access updates to apply

    â–¶ SHOW VALUES
    • 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

    Contains the response data

    â–¶ SHOW VALUES
    • results Array

      List of results for each access entry

      â–¶ SHOW VALUES
      • 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

DELETE https://api.browserstack.com/v1/projects/:pid/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

    List of access entities to revoke

    â–¶ SHOW VALUES
    • 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

    List of results for each access entry

    â–¶ SHOW VALUES
    • 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.

We're continuously improving our docs. We'd love to know what you liked





Thank you for your valuable feedback

Download Copy Check Circle