Members

Manage project team members. Invite collaborators, assign roles, and control access permissions.

Role permissions

Permissionadminmemberviewer
View test cases & runs
Create & edit test cases
Execute test runs
Manage milestones
Invite & remove members
Change member roles
Project settings
Delete project
GET/v1/projects/:project_id/members

List members

Retrieve all members of a project including their role, email, and join date.

Query parameters

ParameterTypeRequiredDescription
rolestringNoFilter by role: admin, member, or viewer
pagenumberNoPage number for pagination (default: 1)
per_pagenumberNoItems per page (default: 20, max: 100)
Request
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
     "https://api.testably.app/v1/projects/proj_abc123/members"
Response 200 OK
{
  "data": [
    {
      "id": "user_42",
      "email": "alice@example.com",
      "name": "Alice Kim",
      "avatar_url": "https://cdn.testably.app/avatars/user_42.png",
      "role": "admin",
      "joined_at": "2026-01-15T08:00:00Z"
    },
    {
      "id": "user_43",
      "email": "bob@example.com",
      "name": "Bob Park",
      "avatar_url": null,
      "role": "member",
      "joined_at": "2026-02-01T10:30:00Z"
    },
    {
      "id": "user_44",
      "email": "carol@example.com",
      "name": "Carol Lee",
      "avatar_url": null,
      "role": "viewer",
      "joined_at": "2026-03-10T14:00:00Z"
    }
  ],
  "meta": { "page": 1, "per_page": 20, "total": 3 }
}

POST/v1/projects/:project_id/members/invite

Invite member

Send an invitation to join the project. The invited user receives an email with a join link. Requires admin role.

Request body

ParameterTypeRequiredDescription
emailstringYesEmail address to invite
rolestringYesAssigned role: admin, member, or viewer
Request
curl -X POST \
     -H "Authorization: Bearer YOUR_API_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{
       "email": "dave@example.com",
       "role": "member"
     }' \
     "https://api.testably.app/v1/projects/proj_abc123/members/invite"
Response 201 Created
{
  "id": "inv_001",
  "email": "dave@example.com",
  "role": "member",
  "status": "pending",
  "invited_by": "user_42",
  "expires_at": "2026-04-05T09:00:00Z",
  "created_at": "2026-03-29T09:00:00Z"
}

PATCH/v1/projects/:project_id/members/:user_id

Change member role

Update a member's role. Requires admin role. You cannot change your own role if you are the last admin.

Request body

ParameterTypeRequiredDescription
rolestringYesNew role: admin, member, or viewer
Request
curl -X PATCH \
     -H "Authorization: Bearer YOUR_API_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{ "role": "admin" }' \
     "https://api.testably.app/v1/projects/proj_abc123/members/user_43"
Response 200 OK
{
  "id": "user_43",
  "email": "bob@example.com",
  "name": "Bob Park",
  "role": "admin",
  "joined_at": "2026-02-01T10:30:00Z",
  "updated_at": "2026-03-29T09:15:00Z"
}

DELETE/v1/projects/:project_id/members/:user_id

Remove member

Remove a member from the project. Requires admin role. You cannot remove yourself if you are the last admin.

Request
curl -X DELETE \
     -H "Authorization: Bearer YOUR_API_TOKEN" \
     "https://api.testably.app/v1/projects/proj_abc123/members/user_44"
Response 204 No Content
(empty response body)

Error responses

StatusDescription
400Invalid request body (e.g., invalid role value)
401Missing or invalid API token
403Insufficient permissions (admin role required)
404Project or member not found
409User already a member or pending invitation exists
422Cannot remove or demote the last admin
429Rate limit exceeded (60 req/min)

Product

Use Cases

Compare

Resources

Legal

© 2026 Testably. All rights reserved.

We use cookies to improve your experience.

Strictly necessary cookies are required for login and security. Optional cookies help us analyze usage and improve our service. Learn more →