A meeting space member is a user who's configured to have a role in the meeting
space. These users can join the meeting space without requesting permission to
connect (also known as "knocking").

While meeting organizers can automatically enter the meeting space, you can also
configure additional meeting space members to join the meeting without knocking.
Additionally, members can be configured to have a
[`Role`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members#role) in the
meeting, such as `COHOST` which allows them to co-manage the meeting during a
conference, though they cannot configure auto artifacts or alter moderation
settings. For more information about accessing a meeting space without
knocking, see
[`AccessType`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces#accesstype).

The [`spaces.members`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members)
resource includes the `name`, `email`, and `role` fields.

Note that a meeting space member is different from a
[participant](https://developers.google.com/workspace/meet/api/guides/participants). A participant is a
person joined to a call or that uses [Companion
mode](https://support.google.com/meet/answer/11295507), watching as a viewer, or
a room device connected to a call. There's one
[`conferenceRecords.participants`](https://developers.google.com/workspace/meet/api/reference/rest/v2/conferenceRecords.participants)
resource for each person.

## Common method behaviors

When managing meeting space members using the Meet REST API, methods share
the following conventions:

- **Path parameters:** Each method uses a path parameter. The `create`,
  `list`, and `batchUpdate` methods use the `parent` field to refer to the
  meeting space (`spaces/{space}`). The `delete`, `get`, and `patch` methods
  use the `name` field to filter results by meeting space and member name
  (`spaces/{space}/members/{member}`).

- **Return types:** The `create`, `get`, and `patch` methods return an
  instance of the `Member` resource. The `list` and `batchUpdate` methods
  return a list of `Member` resources (`delete` returns an empty response
  body).

- **Field masks:** All methods, except `delete`, support a field mask. For the
  `create`, `get`, and `list` methods, you can use the `fields` parameter in
  [SystemParameterContext](https://cloud.google.com/apis/docs/system-parameters)
  to specify which fields to return. When you omit the `fields` parameter, the
  API response defaults to `"name,email,role,user"`. For the `patch` and
  `batchUpdate` methods, you use an `updateMask` to specify which fields to
  change.

- **Using a FieldMask:** A
  [`FieldMask`](https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask)
  is a way for API callers to list fields a request should return or modify.
  It's a comma-delimited list of fields to specify only certain fields in an
  object are used while leaving the other fields unchanged. Using a
  `FieldMask` allows the API to avoid unnecessary work and improves
  performance. For more information on field masks, see Google Sheets API's [Use
  field masks](https://developers.google.com/workspace/sheets/api/guides/field-masks).

## Create a member

To add a member to a meeting space, use the
[`create`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members/create)
method on the
[`spaces.members`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members)
resource.

The following code sample shows how to create a member:

### Java

    import com.google.apps.meet.v2.Member;
    import com.google.apps.meet.v2.SpacesServiceClient;

    public class CreateMember {
      public static void main(String[] args) throws Exception {
        try (SpacesServiceClient client = SpacesServiceClient.create()) {
          Member member = Member.newBuilder()
              .setEmail("user@example.com")
              .setRole(Member.Role.COHOST)
              .build();
          Member response = client.createMember("spaces/SPACE_NAME", member);
          System.out.println("Member created: " + response.getName());
        }
      }
    }

### Node.js

    const {SpacesServiceClient} = require('@google-apps/meet').v2;

    async function createMember(spaceName, email) {
      const client = new SpacesServiceClient();
      const [response] = await client.createMember({
        parent: spaceName,
        member: {
          email: email,
          role: 'COHOST',
        },
      });
      console.log(`Member created: ${response.name}`);
      return response;
    }

### Python

    from google.apps import meet_v2

    def create_member(space_name, email):
        client = meet_v2.SpacesServiceClient()
        member = meet_v2.Member(
            email=email,
            role=meet_v2.Member.Role.COHOST,
        )
        response = client.create_member(parent=space_name, member=member)
        print(f"Member created: {response.name}")
        return response

### Apps Script

    function createMember(spaceName, email) {
      const response = UrlFetchApp.fetch(
        `https://meet.googleapis.com/v2/${spaceName}/members`,
        {
          method: 'post',
          contentType: 'application/json',
          headers: {
            Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
          },
          payload: JSON.stringify({
            email: email,
            role: 'COHOST',
          }),
        }
      );
      const member = JSON.parse(response.getContentText());
      Logger.log('Member created: ' + member.name);
      return member;
    }

### cURL

    curl -X POST \
      "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members" \
      -H "Authorization: Bearer ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "email": "user@example.com",
        "role": "COHOST"
      }'

Replace <var translate="no">ACCESS_TOKEN</var> with the access token that grants access to the API.

Replace the space name value with the unique server-generated ID for the meeting
space.

## Get details about a member

To retrieve details about a specific member, use the
[`get`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members/get) method on the
[`spaces.members`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members)
resource.

The following code sample shows how to retrieve a member:

### Java

    import com.google.apps.meet.v2.Member;
    import com.google.apps.meet.v2.SpacesServiceClient;

    public class GetMember {
      public static void main(String[] args) throws Exception {
        try (SpacesServiceClient client = SpacesServiceClient.create()) {
          Member response =
              client.getMember("spaces/SPACE_NAME/members/MEMBER_NAME");
          System.out.println("Member role: " + response.getRole());
        }
      }
    }

### Node.js

    const {SpacesServiceClient} = require('@google-apps/meet').v2;

    async function getMember(memberName) {
      const client = new SpacesServiceClient();
      const [response] = await client.getMember({name: memberName});
      console.log(`Member role: ${response.role}`);
      return response;
    }

### Python

    from google.apps import meet_v2

    def get_member(member_name):
        client = meet_v2.SpacesServiceClient()
        response = client.get_member(name=member_name)
        print(f"Member role: {response.role.name}")
        return response

### Apps Script

    function getMember(memberName) {
      // memberName format: "spaces/{space}/members/{member}"
      const response = UrlFetchApp.fetch(
        `https://meet.googleapis.com/v2/${memberName}`,
        {
          method: 'get',
          headers: {
            Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
          },
        }
      );
      const member = JSON.parse(response.getContentText());
      Logger.log('Member role: ' + member.role);
      return member;
    }

### cURL

    curl -X GET \
      "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members/MEMBER_NAME" \
      -H "Authorization: Bearer ACCESS_TOKEN"

Replace <var translate="no">ACCESS_TOKEN</var> with the access token that grants access to the API.

Replace the space name and member name values with the unique server-generated
IDs for the meeting space and member.

## List members

To list all members in a meeting space, use the
[`list`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members/list)
method on the
[`spaces.members`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members)
resource.

The following code sample shows how to list members:

### Java

    import com.google.apps.meet.v2.Member;
    import com.google.apps.meet.v2.SpacesServiceClient;

    public class ListMembers {
      public static void main(String[] args) throws Exception {
        try (SpacesServiceClient client = SpacesServiceClient.create()) {
          for (Member member :
              client.listMembers("spaces/SPACE_NAME").iterateAll()) {
            System.out.println("Member: " + member.getName() + " (" +
                member.getEmail() + ")");
          }
        }
      }
    }

### Node.js

    const {SpacesServiceClient} = require('@google-apps/meet').v2;

    async function listMembers(spaceName) {
      const client = new SpacesServiceClient();
      const [members] = await client.listMembers({parent: spaceName});
      members.forEach((member) => {
        console.log(`Member: ${member.name} (${member.email})`);
      });
      return members;
    }

### Python

    from google.apps import meet_v2

    def list_members(space_name):
        client = meet_v2.SpacesServiceClient()
        response = client.list_members(parent=space_name)
        for member in response:
            print(f"Member: {member.name} ({member.email})")

### Apps Script

    function listMembers(spaceName) {
      const response = UrlFetchApp.fetch(
        `https://meet.googleapis.com/v2/${spaceName}/members`,
        {
          method: 'get',
          headers: {
            Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
          },
        }
      );
      const data = JSON.parse(response.getContentText());
      (data.members || []).forEach((member) => {
        Logger.log(`Member: ${member.name} (${member.email})`);
      });
      return data.members;
    }

### cURL

    curl -X GET \
      "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members" \
      -H "Authorization: Bearer ACCESS_TOKEN"

Replace <var translate="no">ACCESS_TOKEN</var> with the access token that grants access to the API.

Replace the space name value with the unique server-generated ID for the meeting
space.

## Update a member

To update a member's role in a meeting space, use the
[`patch`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members/patch) method on
the [`spaces.members`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members)
resource.

The following code sample shows how to update a member:

### Java

    import com.google.apps.meet.v2.Member;
    import com.google.apps.meet.v2.SpacesServiceClient;
    import com.google.protobuf.FieldMask;

    public class UpdateMember {
      public static void main(String[] args) throws Exception {
        try (SpacesServiceClient client = SpacesServiceClient.create()) {
          Member member = Member.newBuilder()
              .setName("spaces/SPACE_NAME/members/MEMBER_NAME")
              .setRole(Member.Role.ROLE_UNSPECIFIED)
              .build();
          FieldMask updateMask =
              FieldMask.newBuilder().addPaths("role").build();
          Member response = client.updateMember(member, updateMask);
          System.out.println("Updated member: " + response.getName());
        }
      }
    }

### Node.js

    const {SpacesServiceClient} = require('@google-apps/meet').v2;

    async function updateMember(memberName) {
      const client = new SpacesServiceClient();
      const [response] = await client.updateMember({
        member: {
          name: memberName,
          role: 'ROLE_UNSPECIFIED',
        },
        updateMask: {
          paths: ['role'],
        },
      });
      console.log(`Updated member: ${response.name}`);
      return response;
    }

### Python

    from google.apps import meet_v2
    from google.protobuf import field_mask_pb2

    def update_member(member_name):
        client = meet_v2.SpacesServiceClient()
        member = meet_v2.Member(
            name=member_name,
            role=meet_v2.Member.Role.ROLE_UNSPECIFIED,
        )
        update_mask = field_mask_pb2.FieldMask(paths=["role"])
        response = client.update_member(member=member, update_mask=update_mask)
        print(f"Updated member: {response.name}")
        return response

### Apps Script

    function updateMember(memberName) {
      // memberName format: "spaces/{space}/members/{member}"
      const baseUrl = 'https://meet.googleapis.com/v2/';
      const url = `${baseUrl}${memberName}?updateMask=role`;
      const response = UrlFetchApp.fetch(url, {
        method: 'patch',
        contentType: 'application/json',
        headers: {
          Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
        },
        payload: JSON.stringify({
          role: 'ROLE_UNSPECIFIED',
        }),
      });
      const member = JSON.parse(response.getContentText());
      Logger.log('Updated member: ' + member.name);
      return member;
    }

### cURL

    curl -X PATCH \
      "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members/MEMBER_NAME?updateMask=role" \
      -H "Authorization: Bearer ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "role": "ROLE_UNSPECIFIED"
      }'

Replace <var translate="no">ACCESS_TOKEN</var> with the access token that grants access to the API.

Replace the space name and member name values with the unique server-generated
IDs for the meeting space and member.

## Batch update members

To update the roles of multiple members in a single request, use the
[`batchUpdate`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members/batchUpdate)
method on the
[`spaces.members`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members)
resource.

The following code sample shows how to batch update members:

### Java

    import com.google.apps.meet.v2.BatchUpdateMembersRequest;
    import com.google.apps.meet.v2.BatchUpdateMembersResponse;
    import com.google.apps.meet.v2.Member;
    import com.google.apps.meet.v2.SpacesServiceClient;
    import com.google.apps.meet.v2.UpdateMemberRequest;
    import com.google.protobuf.FieldMask;
    import java.util.Arrays;

    public class BatchUpdateMembers {
      public static void main(String[] args) throws Exception {
        try (SpacesServiceClient client = SpacesServiceClient.create()) {
          UpdateMemberRequest req1 = UpdateMemberRequest.newBuilder()
              .setMember(Member.newBuilder()
                  .setName("spaces/SPACE_NAME/members/MEMBER_1")
                  .setRole(Member.Role.COHOST)
                  .build())
              .build();
          UpdateMemberRequest req2 = UpdateMemberRequest.newBuilder()
              .setMember(Member.newBuilder()
                  .setName("spaces/SPACE_NAME/members/MEMBER_2")
                  .setRole(Member.Role.ROLE_UNSPECIFIED)
                  .build())
              .build();
          BatchUpdateMembersRequest request =
              BatchUpdateMembersRequest.newBuilder()
                  .setParent("spaces/SPACE_NAME")
                  .addAllRequests(Arrays.asList(req1, req2))
                  .setUpdateMask(
                      FieldMask.newBuilder().addPaths("role").build())
                  .build();
          BatchUpdateMembersResponse response =
              client.batchUpdateMembers(request);
          System.out.println(
              "Updated " + response.getMembersCount() + " members.");
        }
      }
    }

### Node.js

    const {SpacesServiceClient} = require('@google-apps/meet').v2;

    async function batchUpdateMembers(spaceName, member1, member2) {
      const client = new SpacesServiceClient();
      const [response] = await client.batchUpdateMembers({
        parent: spaceName,
        requests: [
          {
            member: {name: member1, role: 'COHOST'},
          },
          {
            member: {name: member2, role: 'ROLE_UNSPECIFIED'},
          },
        ],
        updateMask: {
          paths: ['role'],
        },
      });
      console.log(`Updated ${response.members.length} members.`);
      return response;
    }

### Python

    from google.apps import meet_v2
    from google.protobuf import field_mask_pb2

    def batch_update_members(space_name, member_1, member_2):
        client = meet_v2.SpacesServiceClient()
        requests = [
            meet_v2.UpdateMemberRequest(
                member=meet_v2.Member(
                    name=member_1, role=meet_v2.Member.Role.COHOST
                )
            ),
            meet_v2.UpdateMemberRequest(
                member=meet_v2.Member(
                    name=member_2, role=meet_v2.Member.Role.ROLE_UNSPECIFIED
                )
            ),
        ]
        update_mask = field_mask_pb2.FieldMask(paths=["role"])
        response = client.batch_update_members(
            parent=space_name, requests=requests, update_mask=update_mask
        )
        print(f"Updated {len(response.members)} members.")
        return response

### Apps Script

    function batchUpdateMembers(spaceName, member1, member2) {
      const url =
          `https://meet.googleapis.com/v2/${spaceName}/members:batchUpdate`;
      const response = UrlFetchApp.fetch(url, {
        method: 'post',
        contentType: 'application/json',
        headers: {
          Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
        },
        payload: JSON.stringify({
          requests: [
            {member: {name: member1, role: 'COHOST'}},
            {member: {name: member2, role: 'ROLE_UNSPECIFIED'}},
          ],
          updateMask: 'role',
        }),
      });
      const data = JSON.parse(response.getContentText());
      Logger.log(`Updated ${data.members.length} members.`);
      return data.members;
    }

### cURL

    curl -X POST \
      "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members:batchUpdate" \
      -H "Authorization: Bearer ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "requests": [
          {
            "member": {
              "name": "spaces/SPACE_NAME/members/MEMBER_1",
              "role": "COHOST"
            }
          },
          {
            "member": {
              "name": "spaces/SPACE_NAME/members/MEMBER_2",
              "role": "ROLE_UNSPECIFIED"
            }
          }
        ],
        "updateMask": "role"
      }'

Replace <var translate="no">ACCESS_TOKEN</var> with the access token that grants access to the API.

Replace the space name and member name values with the unique server-generated
IDs for the meeting space and members.

## Delete a member

To remove a member from a meeting space, use the
[`delete`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members/delete)
method on the
[`spaces.members`](https://developers.google.com/workspace/meet/api/reference/rest/v2/spaces.members)
resource.

The following code sample shows how to delete a member:

### Java

    import com.google.apps.meet.v2.SpacesServiceClient;

    public class DeleteMember {
      public static void main(String[] args) throws Exception {
        try (SpacesServiceClient client = SpacesServiceClient.create()) {
          client.deleteMember("spaces/SPACE_NAME/members/MEMBER_NAME");
          System.out.println("Member deleted.");
        }
      }
    }

### Node.js

    const {SpacesServiceClient} = require('@google-apps/meet').v2;

    async function deleteMember(memberName) {
      const client = new SpacesServiceClient();
      await client.deleteMember({name: memberName});
      console.log('Member deleted.');
    }

### Python

    from google.apps import meet_v2

    def delete_member(member_name):
        client = meet_v2.SpacesServiceClient()
        client.delete_member(name=member_name)
        print("Member deleted.")

### Apps Script

    function deleteMember(memberName) {
      // memberName format: "spaces/{space}/members/{member}"
      UrlFetchApp.fetch(`https://meet.googleapis.com/v2/${memberName}`, {
        method: 'delete',
        headers: {
          Authorization: 'Bearer ' + ScriptApp.getOAuthToken(),
        },
      });
      Logger.log('Member deleted.');
    }

### cURL

    curl -X DELETE \
      "https://meet.googleapis.com/v2/spaces/SPACE_NAME/members/MEMBER_NAME" \
      -H "Authorization: Bearer ACCESS_TOKEN"

Replace <var translate="no">ACCESS_TOKEN</var> with the access token that grants access to the API.

Replace the space name and member name values with the unique server-generated
IDs for the meeting space and member.

## Related topics

- [Manage meeting spaces](https://developers.google.com/workspace/meet/api/guides/manage-meeting-spaces)
- [Configure meeting space settings](https://developers.google.com/workspace/meet/api/guides/meeting-spaces-configuration)
- [Work with participants](https://developers.google.com/workspace/meet/api/guides/participants)