Project memberships

Control project access by managing user and group permissions at the project level.

Update Project Membership

PUT /v1/project-memberships/{projectId}

Update a project membership.

Path Parameters:

  • projectId (string, required): Project UUID

Request Body:

{
    "userIds": [
        "56d4b940-ae51-4515-b207-f63328a66b32",
        "78f6c152-bf62-5626-c318-g74439b77c43"
    ],
    "groupIds": [
        "12a3b4c5-d6e7-8f90-1234-567890abcdef"
    ],
    "projectName": "Mobile App Development"
}

Response (200 OK):

{
    "message": "Project membership updated successfully"
}

Add Users/Groups to Project

PUT /v1/project-memberships/{projectId}/add

Update a project membership by adding users and/or groups.

Path Parameters:

  • projectId (string, required): Project UUID

Request Body:

{
    "userIds": [
        "89g7d263-ch73-6737-d429-h85550c88d54"
    ],
    "groupIds": [
        "98z7y6x5-w4v3-2u1t-0987-654321fedcba"
    ]
}

Response (200 OK):

{
    "message": "Users and groups added to project successfully"
}

Remove Users/Groups from Project

PUT /v1/project-memberships/{projectId}/remove

Update a project membership by removing users and/or groups.

Path Parameters:

  • projectId (string, required): Project UUID

Request Body:

{
    "userIds": [
        "78f6c152-bf62-5626-c318-g74439b77c43"
    ],
    "groupIds": [
        "12a3b4c5-d6e7-8f90-1234-567890abcdef"
    ]
}

Response (200 OK):

{
    "message": "Users and groups removed from project successfully"
}

Get Project Membership Groups

GET /v1/project-memberships/{projectId}/groups

Get the project membership groups.

Path Parameters:

  • projectId (string, required): Project UUID

Query Parameters:

  • pageSize (integer, optional): How many elements per page (1-100, default: 50)
  • pageNumber (integer, optional): Current page number (default: 1)
  • sortField (string, optional): Field to sort by (id, name, createdAt, description, default: createdAt)
  • sortDirection (string, optional): Sort direction (ASC, DESC, default: ASC)
  • search (string, optional): Search keyword
  • expandGroupUsersMaxCount (integer, optional): Maximum number of user details per group (0-100, default: 0)

Response (200 OK):

{
    "content": [
        {
            "id": "12a3b4c5-d6e7-8f90-1234-567890abcdef",
            "name": "Developers",
            "description": "Development team members",
            "numberOfUsers": 5,
            "createdAt": "2024-01-01T08:00:00Z",
            "updatedAt": "2024-01-15T10:30:00Z",
            "userDetails": [
                {
                    "avatarUrl": "https://example.com/avatar1.jpg",
                    "firstName": "John",
                    "lastName": "Doe"
                },
                {
                    "avatarUrl": null,
                    "firstName": "Jane",
                    "lastName": "Smith"
                }
            ]
        }
    ],
    "page": {
        "size": 1,
        "pageSize": 50,
        "pageNumber": 1,
        "totalElements": 1,
        "totalPages": 1
    }
}

Get Project Membership Users

GET /v1/project-memberships/{projectId}/users

Get the project membership users.

Path Parameters:

  • projectId (string, required): Project UUID

Query Parameters:

  • pageSize (integer, optional): How many elements per page (1-100, default: 50)
  • pageNumber (integer, optional): Current page number (default: 1)
  • sortField (string, optional): Field to sort by (id, firstName, lastName, email, createdAt, lastLoginAt, role, default: createdAt)
  • sortDirection (string, optional): Sort direction (ASC, DESC, default: ASC)
  • search (string, optional): Search keyword
  • invitationStatus (string, optional): Filter by invitation status (any, invite, accepted, default: any)

Response (200 OK):

{
    "content": [
        {
            "id": "56d4b940-ae51-4515-b207-f63328a66b32",
            "fsidUserId": "56d4b940-ae51-4515-b207-f63328a66b32",
            "firstName": "Joe",
            "lastName": "Test",
            "email": "[email protected]",
            "avatarUrl": "https://example.com/avatar.jpg",
            "lastLoginAt": "2024-01-15T10:30:00Z",
            "createdAt": "2024-01-01T08:00:00Z",
            "updatedAt": "2024-01-15T10:30:00Z",
            "isInvite": false,
            "role": "builder",
            "groupNames": ["Developers"],
            "__fsidPermissions": {
                "api-keys.manage.own": true,
                "api-keys.manage.all": false
            }
        },
        {
            "id": "89g7d263-ch73-6737-d429-h85550c88d54",
            "fsidUserId": "89g7d263-ch73-6737-d429-h85550c88d54",
            "firstName": "John",
            "lastName": "Doe",
            "email": "[email protected]",
            "avatarUrl": null,
            "lastLoginAt": null,
            "createdAt": "2024-01-10T14:30:00Z",
            "updatedAt": "2024-01-10T14:30:00Z",
            "isInvite": true,
            "role": "builder",
            "groupNames": [],
            "__fsidPermissions": {
                "api-keys.manage.own": true,
                "api-keys.manage.all": false
            }
        }
    ],
    "page": {
        "size": 2,
        "pageSize": 50,
        "pageNumber": 1,
        "totalElements": 2,
        "totalPages": 1
    }
}

Response (400 Bad Request):

{
    "message": "Invalid Paging Arguments",
    "traceId": "09f9aa68-4d89-465b-8d6d-41490fff7727"
}