Google Chat Data API: Endpoints & Fields
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
API surface
Paginate the home world of spaces and DMs
POST
/v1/inbox/pageopendataReturns 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/membersosintReturns 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/lookuposintReturns 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/createopendataPosts 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/searchopendataRuns 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/autocompleteosintTypeahead 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.