Google Chat icon

Google Chat Data API: Endpoints & Fields

Google LLC · Identity

Google Chat's signed-in data API is a protobuf RPC surface. The home list pages through /v1/inbox/page (worldSections, worldItems, includedMembers). A space roster comes from /v1/spaces/members (memberId, nullableEmail, membershipRole). Presence is /v1/presence/lookup; new threads post to /v1/threads/create; message search runs through /v1/messages/search. Directory typeahead is /v1/directory/autocomplete.

Google Chat (package com.google.android.apps.dynamite, versionName 2026.09.14.980992304.Release) is Google's Android client for Workspace spaces, 1:1 and group DMs, huddles and in-thread replies. Its signed-in data API is a protobuf RPC surface: the home list paginates spaces and DMs (worldSections, worldItems, includedMembers, paginationToken, worldFilter). Spaces and DMs expose groupName, roomAvatarUrl, gdmUserIds and primaryDmPartnerUserId; memberships carry memberId plus nullableEmail; presence reads presenceState, dndStatus, customStatus and presenceShared; new threads post messageText, annotations, attachments and messageId. A directory typeahead resolves people to givenName, familyName, emailAddress, avatarUrl and personId, and full-text message search returns matchedMessages with snippets. Signed-in calls use an OAuth2 access token for the Google account.

Screenshots

  • Google Chat screenshot 1
  • Google Chat screenshot 2
  • Google Chat screenshot 3
  • Google Chat screenshot 4
  • Google Chat screenshot 5
  • Google Chat screenshot 6
  • Google Chat screenshot 7
  • Google Chat screenshot 8

API surface

  • Paginate the home world of spaces and DMs

    POST /v1/inbox/page opendata

    Returns a page of the signed-in user's Chat home (spaces and DMs) with worldSections, worldItems, includedMembers and a paginationToken used by the Merged World / inbox screen.

    Auth: OAuth2 Bearer access token for the signed-in Google account (Workspace chat scope bundle). Requests are protobuf-encoded POSTs.

    • pageSize
    • worldSection
    • worldFilter
    • worldTopicFilter
    • paginationToken
    • contentSortOrder
    • foregroundWorldSyncSessionId
    • shouldRefresh
    • requestedAllGroups
    • worldSections
    • hasMoreItems
    • sectionWatermark
    • worldSectionType
    • includedMembers
    • memberId
    • nullableEmail
    • displayName
    • givenName
    • familyName
    • avatarUrl
    • worldItems
    • groupId
    • groupName
    • roomAvatarUrl
    • primaryDmPartnerUserId
    • worldEntities
    • unreadCount

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/inbox/page HTTP/1.1
    Authorization: Bearer <oauth2-access-token>
    Content-Type: application/x-protobuf
    
    {
      "pageSize": 50,
      "worldSection": {
        "worldFilter": "INBOX",
        "worldTopicFilter": "ALL",
        "paginationToken": ""
      },
      "contentSortOrder": "LAST_ACTIVITY_DESC",
      "foregroundWorldSyncSessionId": "ws-7f3a1c2e",
      "shouldRefresh": true
    }
    {
      "requestedAllGroups": false,
      "worldSections": [{
        "paginationToken": "CgQItoED",
        "sort": "LAST_ACTIVITY_DESC",
        "worldFilter": "INBOX",
        "worldTopicFilter": "ALL",
        "sectionWatermark": "1758902400000000",
        "hasMoreItems": true,
        "worldSectionType": "INBOX"
      }],
      "includedMembers": [{
        "memberId": "user/human/123456789012345678901",
        "nullableEmail": "[email protected]",
        "displayName": "Alex Rivera",
        "givenName": "Alex",
        "familyName": "Rivera",
        "avatarUrl": "https://lh3.googleusercontent.com/a-/AOh14Example"
      }],
      "worldItems": [{
        "groupId": "space/AAAAexample01",
        "groupName": "Platform standup",
        "roomAvatarUrl": "https://lh3.googleusercontent.com/d/space-avatar",
        "primaryDmPartnerUserId": null
      }],
      "worldEntities": [{
        "groupId": "space/AAAAexample01",
        "unreadCount": 3
      }]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's home inbox flow.
    • Field set matches the space and DM list bound to the Chat home screen.
  • List members of a space or group DM

    POST /v1/spaces/members osint

    Returns the roster for a space or group DM (memberId, nullableEmail, displayName, avatarUrl, membershipRole) used by Manage Members and the people sheet.

    Auth: OAuth2 Bearer access token for the signed-in Google account (Workspace chat scope bundle). Requests are protobuf-encoded POSTs.

    • groupId
    • paginationToken
    • pageSize
    • members
    • id
    • memberId
    • nullableEmail
    • displayName
    • givenName
    • familyName
    • avatarUrl
    • membershipRole
    • emailAddress
    • placeholderUser
    • unknown
    • serverSyncNeeded
    • hasMoreItems

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/spaces/members HTTP/1.1
    Authorization: Bearer <oauth2-access-token>
    Content-Type: application/x-protobuf
    
    {
      "groupId": "space/AAAAexample01",
      "paginationToken": "",
      "pageSize": 100
    }
    {
      "members": [{
        "id": "user/human/123456789012345678901",
        "memberId": "user/human/123456789012345678901",
        "nullableEmail": "[email protected]",
        "displayName": "Alex Rivera",
        "givenName": "Alex",
        "familyName": "Rivera",
        "avatarUrl": "https://lh3.googleusercontent.com/a-/AOh14Example",
        "membershipRole": "ROLE_MEMBER",
        "user": {
          "emailAddress": "[email protected]"
        },
        "placeholderUser": false,
        "unknown": false,
        "serverSyncNeeded": false
      }],
      "paginationToken": "EgwIAhABGAEgASgB",
      "hasMoreItems": false
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's space member management flow.
    • Field set matches the roster shown in the people sheet.
  • Read user presence, DND and custom status

    POST /v1/presence/lookup osint

    Returns presenceState, dndStatus, customStatus and presenceShared for one or more memberIds, feeding the availability dot on avatars and the status row in a DM.

    Auth: OAuth2 Bearer access token for the signed-in Google account (Workspace chat scope bundle). Requests are protobuf-encoded POSTs.

    • memberIds
    • userStatusMap
    • presenceState
    • dndStatus
    • dndState
    • dndExpiryTimeMicros
    • customStatus
    • statusText
    • statusEmoji
    • clearAfterMicros
    • presenceShared

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/presence/lookup HTTP/1.1
    Authorization: Bearer <oauth2-access-token>
    Content-Type: application/x-protobuf
    
    {
      "memberIds": [
        "user/human/123456789012345678901",
        "user/human/987654321098765432109"
      ]
    }
    {
      "userStatusMap": {
        "user/human/123456789012345678901": {
          "presenceState": "ACTIVE",
          "dndStatus": {
            "dndState": "AVAILABLE",
            "dndExpiryTimeMicros": 0
          },
          "customStatus": {
            "statusText": "In a huddle",
            "statusEmoji": ":headphones:",
            "clearAfterMicros": 1758906000000000
          },
          "presenceShared": true
        }
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's availability indicator flow.
    • Field set matches the presence dot and status row shown next to avatars.
  • Create a new topic (thread) in a space

    POST /v1/threads/create opendata

    Posts a new thread in a space (messageText, annotations, attachments, messageId) and returns the created topicId used by the message stream.

    Auth: OAuth2 Bearer access token for the signed-in Google account (Workspace chat scope bundle). Requests are protobuf-encoded POSTs.

    • groupId
    • messageText
    • annotations
    • quotedMessage
    • messageId
    • acceptFormatAnnotations
    • attachments
    • messageCreationTimeInMicros
    • originAppId
    • unsentMessageId
    • topicId
    • createTimeMicros
    • creatorMemberId

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/threads/create HTTP/1.1
    Authorization: Bearer <oauth2-access-token>
    Content-Type: application/x-protobuf
    
    {
      "groupId": "space/AAAAexample01",
      "messageText": "Ship notes for Friday's release",
      "annotations": [],
      "quotedMessage": null,
      "messageId": "spaces/AAAAexample01/messages/MSG-7f3a",
      "acceptFormatAnnotations": true,
      "attachments": [],
      "messageCreationTimeInMicros": 1758902400000000,
      "originAppId": null,
      "unsentMessageId": null
    }
    {
      "topicId": "spaces/AAAAexample01/threads/THD-9c2b",
      "messageId": "spaces/AAAAexample01/messages/MSG-7f3a",
      "groupId": "space/AAAAexample01",
      "messageText": "Ship notes for Friday's release",
      "createTimeMicros": 1758902400123000,
      "creatorMemberId": "user/human/123456789012345678901"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's new-thread compose flow.
    • Field set matches the message record echoed back after posting.
  • Search messages across spaces

    POST /v1/messages/search opendata

    Runs Hub Search over Chat history (query, filter, sessionId) and returns matchedMessages with messageId, topicId, groupName and a text snippet.

    Auth: OAuth2 Bearer access token for the signed-in Google account (Workspace chat scope bundle plus a search query scope). Requests are protobuf-encoded POSTs.

    • query
    • queryId
    • filter
    • groupId
    • fromSelfForSearch
    • namedRoomForSearch
    • size
    • isPagination
    • sessionId
    • searchSurface
    • matchedMessages
    • messageId
    • topicId
    • groupName
    • messageText
    • createTimeMicros
    • creatorMemberId
    • snippet
    • paginationToken
    • resultCount

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/messages/search HTTP/1.1
    Authorization: Bearer <oauth2-access-token>
    Content-Type: application/x-protobuf
    
    {
      "query": "invoice Q3",
      "queryId": "q-8e1c2a",
      "filter": {
        "groupId": null,
        "fromSelfForSearch": false,
        "namedRoomForSearch": true
      },
      "size": 25,
      "isPagination": false,
      "sessionId": "search-sess-44ab",
      "searchSurface": "HUB_SEARCH"
    }
    {
      "matchedMessages": [{
        "messageId": "spaces/AAAAexample01/messages/MSG-11aa",
        "topicId": "spaces/AAAAexample01/threads/THD-9c2b",
        "groupId": "space/AAAAexample01",
        "groupName": "Finance",
        "messageText": "Q3 invoice is in the shared Drive folder",
        "createTimeMicros": 1758816000000000,
        "creatorMemberId": "user/human/123456789012345678901",
        "snippet": "Q3 invoice is in the shared Drive folder"
      }],
      "paginationToken": "CgoIARABGAEgAQ",
      "resultCount": 18
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's message search flow.
    • Field set matches the result cards shown in the search hub.
  • Autocomplete people in the directory

    POST /v1/directory/autocomplete osint

    Typeahead over the Workspace directory used by Start Chat / Create DM / @mention, returning personId, displayName, givenName, familyName, emailAddress and avatarUrl.

    Auth: OAuth2 Bearer access token for the signed-in Google account (read-only people directory scope).

    • query
    • maxResults
    • client
    • results
    • id
    • personId
    • displayName
    • givenName
    • familyName
    • emailAddress
    • avatarUrl

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/directory/autocomplete HTTP/1.1
    Authorization: Bearer <oauth2-access-token>
    Content-Type: application/x-protobuf
    
    {
      "query": "alex ri",
      "maxResults": 8,
      "client": "GOOGLE_CHAT_ANDROID"
    }
    {
      "results": [{
        "id": "people/c123456789012345678901",
        "personId": "people/c123456789012345678901",
        "displayName": "Alex Rivera",
        "givenName": "Alex",
        "familyName": "Rivera",
        "emailAddress": "[email protected]",
        "avatarUrl": "https://lh3.googleusercontent.com/a-/AOh14Example"
      }]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • Reconstructed from the app's people typeahead flow.
    • Field set matches the directory suggestions shown when starting a chat or mentioning someone.

Data categories

  • spaces
  • direct-messages
  • memberships
  • presence
  • messages
  • people-directory

Where teams use this data

  • Workspace roster export

    Pull /v1/inbox/page then /v1/spaces/members per space to build an internal map of groupId, groupName, memberId, nullableEmail, membershipRole and avatarUrl for access reviews.

  • Presence-aware routing

    Call /v1/presence/lookup for on-call memberIds and route a page only when presenceState is ACTIVE and dndStatus is not DND, using customStatus text as the away reason.

  • Knowledge index of Chat threads

    Use /v1/messages/search (query, sessionId, matchedMessages) to hydrate an internal search index with messageId, topicId, groupName and snippet, then open the originating space via groupId.

  • Directory typeahead in a sidecar app

    Proxy the /v1/directory/autocomplete call so a helpdesk tool can resolve query to personId, emailAddress, givenName, familyName and avatarUrl before opening a Chat DM.

Frequently asked questions

How does Google Chat authenticate private data calls?

The client mints an OAuth2 access token for the signed-in Google account with a Workspace chat scope bundle (alongside contacts, drive and calendar access). Calls are protobuf-encoded POSTs authenticated with an Authorization: Bearer header.

Which endpoints expose spaces, members and presence?

/v1/inbox/page pages the home list of spaces and DMs. /v1/spaces/members returns a space roster (memberId, nullableEmail, displayName, membershipRole). /v1/presence/lookup returns presenceState, dndStatus, customStatus and presenceShared.

How does in-app people search work?

Start Chat, Create DM and @mention typeahead call /v1/directory/autocomplete, returning personId, givenName, familyName, emailAddress and avatarUrl. Full-text message search is /v1/messages/search.

What identifiers link a space, a person and a message?

Spaces and DMs use groupId. People use memberId / personId plus nullableEmail. Threads use topicId; posts use messageId. Paginated lists carry paginationToken and hasMoreItems.

Topics

  • Google Chat API
  • chat inbox pagination
  • space roster endpoint
  • presence lookup
  • create thread endpoint
  • message search endpoint
  • directory autocomplete
  • memberId
  • groupId
  • presenceState
  • Workspace Chat data

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

Get a quote