Stitchflow
Google Meet logo

Google Meet User Management API Guide

API workflow

How to automate user lifecycle operations through APIs with caveats that matter in production.

UpdatedMar 11, 2026

Summary and recommendation

Google Meet does not expose a standalone user lifecycle API. Provisioning and deprovisioning are handled entirely through the Admin SDK Directory API (`https://admin.googleapis.com/admin/directory/v1/users`), which manages the underlying Workspace account; Meet access is a downstream consequence of that account's OU assignment and license state.

The Meet REST API (`https://meet.googleapis.com/v2`) is scoped to meeting spaces, conference records, participants, recordings, and transcripts - not identity or user lifecycle. Integrations that need to govern Meet access as part of an identity graph must treat the Admin SDK as the authoritative provisioning surface and the Meet API as a read/audit surface only.

Authentication requires OAuth 2.0 throughout. Service accounts must be granted domain-wide delegation in the Workspace Admin Console (Security → API Controls) before they can act on behalf of users; they cannot authenticate as themselves for Meet API calls.

OAuth access tokens expire after one hour - refresh token handling and token rotation must be implemented explicitly. The `meetings.space.created` scope is principal-scoped: it only grants access to spaces created by the token's owner. Domain-wide space management requires domain-wide delegation.

API quick reference

Has user APIYes
Auth methodOAuth 2.0
Base URLOfficial docs
SCIM availableYes
SCIM plan requiredGoogle Workspace Business Standard and above

Authentication

Auth method: OAuth 2.0

Setup steps

  1. Create a project in Google Cloud Console (console.cloud.google.com).
  2. Enable the 'Google Meet API' for the project.
  3. Configure an OAuth 2.0 consent screen (internal or external).
  4. Create OAuth 2.0 credentials (Web, Desktop, or Service Account depending on use case).
  5. For domain-wide delegation (service accounts), grant the service account the required OAuth scopes in the Google Workspace Admin Console under Security > API Controls.
  6. Request an access token using the appropriate OAuth 2.0 flow (Authorization Code for user context; JWT assertion for service accounts).
  7. Include the Bearer token in the Authorization header of each API request.

Required scopes

Scope Description Required for
https://www.googleapis.com/auth/meetings.space.created Read/write access to Meet spaces created by the authenticated user. Creating and managing meeting spaces
https://www.googleapis.com/auth/meetings.space.readonly Read-only access to Meet spaces. Listing and retrieving meeting space details
https://www.googleapis.com/auth/admin.directory.user Full access to manage Google Workspace users via Admin SDK Directory API. Creating, updating, suspending, and deleting Workspace users (controls Meet access)
https://www.googleapis.com/auth/admin.directory.user.readonly Read-only access to Google Workspace user directory. Listing and retrieving user profiles

User object / data model

Field Type Description On create On update Notes
name string Resource name of the participant (e.g., conferenceRecords/{id}/participants/{id}). server-assigned immutable Meet API participant resource name; not the Workspace user resource.
signedinUser.user string Resource name of the signed-in Google Workspace user (e.g., users/{user}). server-assigned read-only Present only when participant is authenticated with a Google account.
signedinUser.displayName string Display name of the signed-in participant. server-assigned read-only Derived from the user's Google profile.
anonymousUser.displayName string Display name of an anonymous (unauthenticated) participant. server-assigned read-only Present only when participant is not signed in.
earliestStartTime string (Timestamp) Earliest time the participant joined the conference. server-assigned read-only RFC 3339 UTC timestamp.
latestEndTime string (Timestamp) Latest time the participant left the conference. server-assigned read-only Null if participant is still active.
primaryEmail string Primary email address of the Google Workspace user (Admin SDK Directory API). required updatable Admin SDK field; governs Meet access for the user.
suspended boolean Whether the Workspace user account is suspended (Admin SDK). optional (default false) updatable Suspending a user revokes Meet access.
orgUnitPath string Organizational unit path for the user (Admin SDK). optional updatable Controls which Meet policies apply via Admin Console OU settings.
id string Immutable Google Workspace user ID (Admin SDK). server-assigned immutable Use as stable identifier; email addresses can change.

Core endpoints

Create a meeting space

  • Method: POST
  • URL: https://meet.googleapis.com/v2/spaces
  • Watch out for: Spaces are created in the context of the authenticated user. Service accounts require domain-wide delegation to create spaces on behalf of users.

Request example

POST /v2/spaces
Authorization: Bearer {token}
Content-Type: application/json

{}

Response example

{
  "name": "spaces/abc123",
  "meetingUri": "https://meet.google.com/abc-defg-hij",
  "meetingCode": "abc-defg-hij"
}

Get a meeting space

  • Method: GET
  • URL: https://meet.googleapis.com/v2/spaces/{spaceId}
  • Watch out for: Requires meetings.space.created or meetings.space.readonly scope. Only the space creator or a domain admin can retrieve space details.

Request example

GET /v2/spaces/abc123
Authorization: Bearer {token}

Response example

{
  "name": "spaces/abc123",
  "meetingUri": "https://meet.google.com/abc-defg-hij",
  "meetingCode": "abc-defg-hij",
  "config": {"accessType": "TRUSTED"}
}

List conference records

  • Method: GET
  • URL: https://meet.googleapis.com/v2/conferenceRecords
  • Watch out for: Returns only conference records for spaces the authenticated user has access to. Use nextPageToken for pagination.

Request example

GET /v2/conferenceRecords?pageSize=50
Authorization: Bearer {token}

Response example

{
  "conferenceRecords": [
    {"name": "conferenceRecords/xyz", "space": "spaces/abc123",
     "startTime": "2024-01-10T10:00:00Z"}
  ],
  "nextPageToken": "token123"
}

List participants in a conference

  • Method: GET
  • URL: https://meet.googleapis.com/v2/conferenceRecords/{conferenceRecordId}/participants
  • Watch out for: Anonymous participants appear under anonymousUser, not signedinUser. No PII is returned for anonymous users beyond their self-reported display name.

Request example

GET /v2/conferenceRecords/xyz/participants
Authorization: Bearer {token}

Response example

{
  "participants": [
    {"name": "conferenceRecords/xyz/participants/1",
     "signedinUser": {"user": "users/uid123", "displayName": "Jane Doe"}}
  ]
}

Create a Workspace user (Admin SDK)

  • Method: POST
  • URL: https://admin.googleapis.com/admin/directory/v1/users
  • Watch out for: Requires admin.directory.user scope and a super admin or delegated admin account. New users inherit Meet access based on their OU's Meet policy.

Request example

POST /admin/directory/v1/users
Authorization: Bearer {token}

{"primaryEmail":"user@example.com",
 "name":{"givenName":"Jane","familyName":"Doe"},
 "password":"SecurePass1!"}

Response example

{
  "id": "uid123",
  "primaryEmail": "user@example.com",
  "name": {"fullName": "Jane Doe"},
  "suspended": false
}

Suspend a Workspace user (Admin SDK)

  • Method: PUT
  • URL: https://admin.googleapis.com/admin/directory/v1/users/{userKey}
  • Watch out for: Suspending a user immediately revokes their ability to join or host Meet calls. Existing active sessions may not be terminated instantly.

Request example

PUT /admin/directory/v1/users/uid123
Authorization: Bearer {token}

{"suspended": true}

Response example

{
  "id": "uid123",
  "primaryEmail": "user@example.com",
  "suspended": true
}

List Workspace users (Admin SDK)

  • Method: GET
  • URL: https://admin.googleapis.com/admin/directory/v1/users
  • Watch out for: domain or customer parameter is required. Results are paginated via nextPageToken. Deleted users are not returned; use showDeleted=true to include them.

Request example

GET /admin/directory/v1/users?domain=example.com&maxResults=100
Authorization: Bearer {token}

Response example

{
  "users": [
    {"id":"uid123","primaryEmail":"user@example.com","suspended":false}
  ],
  "nextPageToken": "token456"
}

Delete a Workspace user (Admin SDK)

  • Method: DELETE
  • URL: https://admin.googleapis.com/admin/directory/v1/users/{userKey}
  • Watch out for: Deletion is soft for 20 days (user is recoverable). After 20 days, deletion is permanent. Prefer suspension over deletion for offboarding to preserve data.

Request example

DELETE /admin/directory/v1/users/uid123
Authorization: Bearer {token}

Response example

HTTP 204 No Content

Rate limits, pagination, and events

  • Rate limits: Google Meet API and Admin SDK Directory API enforce per-project and per-user quotas. Meet API default quota is 60 requests per minute per project. Admin SDK Directory API has a default of 1,500 queries per 100 seconds per project and 500 queries per 100 seconds per user.
  • Rate-limit headers: No
  • Retry-After header: No
  • Rate-limit notes: Quota increases can be requested via Google Cloud Console. Exponential backoff is recommended on 429 responses. Admin SDK quotas are shared across all Admin SDK APIs in the project.
  • Pagination method: token
  • Default page size: 100
  • Max page size: 100
  • Pagination pointer: pageToken
Plan Limit Concurrent
All Google Workspace plans Meet API: 60 req/min per project; Admin SDK: 1,500 req/100s per project 0
  • Webhooks available: Yes
  • Webhook notes: Google Meet API supports push notifications via Google Cloud Pub/Sub. Clients subscribe to conference record events (meeting started, ended, participant joined/left, recording/transcript ready).
  • Alternative event strategy: Polling the conferenceRecords and participants endpoints as a fallback if Pub/Sub is not available.
  • Webhook events: google.workspace.meet.conference.v2.started, google.workspace.meet.conference.v2.ended, google.workspace.meet.participant.v2.joined, google.workspace.meet.participant.v2.left, google.workspace.meet.recording.v2.fileGenerationEnded, google.workspace.meet.transcript.v2.fileGenerationEnded

SCIM API status

  • SCIM available: Yes

  • SCIM version: 2.0

  • Plan required: Google Workspace Business Standard and above

  • Endpoint: https://www.googleapis.com/admin/directory/v1/scim/v2/Users

  • Supported operations: Create user (POST /Users), Retrieve user (GET /Users/{id}), List users (GET /Users), Update user (PUT /Users/{id}), Partial update (PATCH /Users/{id}), Delete/deprovision user (DELETE /Users/{id})

Limitations:

  • SCIM manages Google Workspace users broadly; there is no Meet-specific SCIM endpoint.
  • Meet access is controlled via Workspace OU policies, not per-user SCIM attributes.
  • SCIM provisioning requires configuration in the IdP (e.g., Okta, Azure AD) pointing to Google Workspace SCIM endpoint.
  • Google Workspace acts as the SCIM service provider; third-party IdPs act as provisioners.
  • Available from Business Standard tier; not available on free Google accounts.

Common scenarios

Three integration patterns cover the majority of production use cases.

Provisioning: POST to https://admin.googleapis.com/admin/directory/v1/users with primaryEmail, name, password, and orgUnitPath. Meet access is inherited from the target OU's policy - if Meet is disabled at the OU level, the user will not have access regardless of license tier. Verify OU Meet policy in Admin Console → Apps → Google Workspace → Google Meet before assuming access is live. SCIM via an IdP (Okta, Azure AD) can automate this step; the SCIM endpoint is https://www.googleapis.com/admin/directory/v1/scim/v2/Users, available from Business Standard tier and above.

Offboarding: PATCH or PUT to https://admin.googleapis.com/admin/directory/v1/users/{userKey} with {"suspended": true} to immediately block Meet sign-in. Note that active Meet sessions may not terminate instantly on suspension. Transfer Meet recordings (stored in the departing user's Google Drive) via the Drive API before deletion. DELETE at the same endpoint is soft for 20 days; after that, deletion is permanent and associated recordings are unrecoverable if not transferred.

Participant auditing: GET https://meet.googleapis.com/v2/conferenceRecords to enumerate recent conference records, then GET https://meet.googleapis.com/v2/conferenceRecords/{id}/participants per record. Authenticated participants surface under signedinUser.user; unauthenticated guests appear under anonymousUser with no PII beyond a self-reported display name. Cross-reference signedinUser.user values against the Admin SDK Directory API to resolve full user profiles. Paginate using nextPageToken; default and maximum page size is 100. For domain-wide auditing, a service account with domain-wide delegation is required - the Meet API only returns records for spaces accessible to the authenticated principal.

Provision a new employee with Meet access

  1. POST to https://admin.googleapis.com/admin/directory/v1/users with primaryEmail, name, password, and orgUnitPath.
  2. Assign the user to an OU that has Meet enabled in the Admin Console (or verify the default OU policy allows Meet).
  3. Optionally, use SCIM via your IdP to automate this step if using Okta or Azure AD as the identity provider.
  4. Verify the user can sign in and access meet.google.com.

Watch out for: Meet access is inherited from the OU policy. If the OU has Meet disabled, the user will not have access even after provisioning. Check Admin Console > Apps > Google Workspace > Google Meet for OU-level settings.

Offboard a departing employee and revoke Meet access

  1. PATCH or PUT to https://admin.googleapis.com/admin/directory/v1/users/{userKey} with {"suspended": true} to immediately block Meet access.
  2. Transfer ownership of any Meet recordings stored in Google Drive using the Drive API (files.update with new owner).
  3. After data retention period, DELETE the user at https://admin.googleapis.com/admin/directory/v1/users/{userKey}.
  4. If using SCIM, set the user's active attribute to false in the IdP to trigger automatic suspension.

Watch out for: Suspension is immediate for new sign-ins but active Meet sessions may not be terminated instantly. Deletion is irreversible after 20 days and removes associated Drive files (recordings) unless transferred first.

Audit participants in recent meetings

  1. GET https://meet.googleapis.com/v2/conferenceRecords to list recent conference records for the authenticated user's spaces.
  2. For each conferenceRecord, GET https://meet.googleapis.com/v2/conferenceRecords/{id}/participants to list all participants.
  3. Check signedinUser.user to identify authenticated participants; anonymousUser entries indicate unauthenticated guests.
  4. Cross-reference signedinUser.user values with Admin SDK Directory API to get full user profile details.
  5. Use nextPageToken to paginate through all participants if the meeting was large.

Watch out for: The Meet API only returns conference records for spaces the authenticated principal has access to. For domain-wide auditing, use a service account with domain-wide delegation. Anonymous participants cannot be identified beyond their self-reported display name.

Why building this yourself is a trap

The primary integration trap is conflating the Meet REST API with a user management API - it is not one. Developers who build against meet.googleapis.com/v2 expecting to provision, suspend, or enumerate users will find no such endpoints; all identity operations route through the Admin SDK.

A second trap is scope underestimation: meetings.space.created is principal-scoped and will silently return empty or partial results when used in a service account context without domain-wide delegation, producing integration behavior that appears correct in testing (single-user OAuth flow) but fails in production (service account flow).

Rate limits compound this: the Meet API enforces 60 requests per minute per project, and the Admin SDK enforces 1,500 requests per 100 seconds per project with a tighter 500 requests per 100 seconds per user - both without rate-limit response headers, so exponential backoff on 429s must be implemented proactively rather than reactively.

Admin SDK quotas are shared across all Admin SDK APIs in the project, meaning a high-volume Directory API integration can exhaust quota that a Meet audit job depends on.

Finally, the SCIM endpoint manages Workspace accounts broadly; there is no Meet-specific SCIM attribute, so Meet access cannot be toggled via SCIM alone - OU policy state in the Admin Console remains the authoritative control plane.

Integrations building an identity graph across Workspace services should model Meet access as a function of (license tier, orgUnitPath, OU Meet policy) rather than a directly settable user attribute.

Automate Google Meet workflows without one-off scripts

Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.

Every app coverage, including apps without APIs
60+ app integrations plus browser automation for apps without APIs
IT graph reconciliation across apps and your IdP
Less than a week to launch, maintained as APIs and admin consoles change
SOC 2 Type II. ~2 hours of your team's time

UpdatedMar 11, 2026

* Details sourced from official product documentation and admin references.

Keep exploring

Related apps

15Five logo

15Five

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

15Five uses a fixed role-based permission model with six predefined roles: Account Admin, HR Admin, Billing Admin, Group Admin, Manager, and Employee. No custom roles can be constructed. User management lives at Settings gear → People → Manage people p

1Password logo

1Password

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

1Password's admin console at my.1password.com covers the full user lifecycle — invitations, group assignments, vault access, suspension, and deletion — without any third-party tooling. Like every app that mixes role-based and resource-level permissions

8x8 logo

8x8

Full API + SCIM
AutomationAPI + SCIM
Last updatedFeb 2026

8x8 Admin Console supports full lifecycle user management — create, deactivate, and delete — across its X Series unified communications platform. Every app a user can access (8x8 Work desktop, mobile, web, Agent Workspace) is gated by license assignmen