- HTTP request
- Path parameters
- Request body
- Response body
- Authorization scopes
- SearchMessagesView
- SearchMessageResult
- Try it!
Searches for messages in Google Chat that the calling user has access to. Returns a list of messages matching the search criteria.
To search across all spaces the user has access to, set parent
to spaces/-
. Using any other value for parent
results in an INVALID_ARGUMENT
error. The returned messages have their name
field populated with the full resource name, which includes the specific space
in which the message resides.
This API doesn't return all message types. The types of messages listed below aren't included in the response. Use messages.list
to list all messages.
- Private Messages that are visible to the authenticated user.
- Messages posted by Chat apps in spaces or group chats.
- Messages in a Chat app DM.
- Messages from blocked users.
- Messages in spaces that the caller has muted.
Requires user authentication with one of the following authorization scopes :
-
https://www.googleapis.com/auth/chat.messages.readonly -
https://www.googleapis.com/auth/chat.messages
HTTP request
POST https://chat.googleapis.com/v1/{parent=spaces/*}/messages:search
The URL uses gRPC Transcoding syntax.
Path parameters
| Parameters | |
|---|---|
parent
|
Required. The resource name of the space to search within. To search across all spaces the user has access to, set this field to To limit the search to one or more spaces, use |
Request body
The request body contains data with the following structure:
| JSON representation |
|---|
{
"filter"
:
string
,
"pageSize"
:
integer
,
"pageToken"
:
string
,
"orderBy"
:
string
,
"view"
:
enum (
|
filter
string
Required. A search query.
The query can specify one or more search keywords, which are used to filter the results,
You can also filter the results using the following message fields:
-
createTime: Accepts a timestamp in RFC-3339 format and the supported comparison operators are:<and>=. -
sender.name: The resource name of the sender (users/{user}). Only supports=. You can use the e-mail as an alias for{user}. For example,users/example@gmail.com, whereexample@gmail.comis the e-mail of the Google Chat user. -
space.name: The resource name of the space where the message is posted. (spaces/{space}). Only supports=. If this filter is not set, the search is performed across all direct messages and spaces the user has access to as a space member. -
space.display_name: Supports the operator:(has) and filters spaces based on a partial match of their display name. Results are limited to the top five space matches. For example,space.display_name:Projectsearches for messages in the top five spaces that contain the word "Project" in their display names. -
attachment: Supports the operator:*(has any) to check for the presence of attachments. Ifattachment:*is specified, only messages that have at least one attachment are returned. -
annotations.user_mentions.user.name: The resource name of the mentioned user (users/{user}). Only supports:(has). For example:annotations.user_mentions.user.name:"users/1234567890"returns only messages that contain a mention to the specified user. Alternatively, the aliasmecan be used to filter for messages that mention the caller user, for example:annotations.user_mentions.user.name:users/me. You can also use the e-mail as an alias for{user}, for example,users/example@gmail.com.
For advanced filtering, the following functions are also available:
-
has_link(): Returns only messages that have at least one hyperlink in the message text. -
is_unread(): Filters out messages that have been read by the calling user.
Using the space.display_name
filter requires that the calling credentials include one of the following authorization scopes
:
-
https://www.googleapis.com/auth/chat.spaces.readonly -
https://www.googleapis.com/auth/chat.spaces
Using the is_unread()
filter requires that the calling credentials include one of the following authorization scopes
:
-
https://www.googleapis.com/auth/chat.users.readstate.readonly -
https://www.googleapis.com/auth/chat.users.readstate
Across different fields, only AND
operators are supported. A valid example is sender.name = "users/1234567890" AND is_unread()
. The word AND
is optional and is implied if omitted. For example, sender.name =
"users/1234567890" is_unread()
is valid and is equivalent to the previous example. An invalid example is sender.name = "users/1234567890" OR
is_unread()
because OR
is not supported between different fields.
Among the same field:
-
createTimesupports onlyAND, and can only be used to represent an interval, such ascreateTime >= "2022-01-01T00:00:00+00:00" AND createTime < "2023-01-01T00:00:00+00:00". -
sender.namesupports only theORoperator, for example:sender.name = "users/1234567890" OR sender.name = "users/0987654321". -
space.namesupports only theORoperator, for example:space.name = "spaces/ABCDEFGH" OR space.name = "spaces/QWERTYUI". -
space.display_namesupports the operatorsANDandOR, but not a mix of both. For example:space.display_name:Project AND space.display_name:Tasksreturns messages that are in spaces with display names containing bothProjectandTasks, whereasspace.display_name:Project OR space.display_name:Tasksreturns messages that are in spaces with display names containing eitherProjectorTasksor both. -
annotations.user_mentions.user.namesupports the operatorsANDandOR, but not a mix of both. For example:annotations.user_mentions.user.name:"users/1234567890" AND annotations.user_mentions.user.name:"users/0987654321"returns only messages that mentions both users, whereasannotations.user_mentions.user.name:"users/1234567890" OR annotations.user_mentions.user.name:"users/0987654321"returns messages that mention either user or both.
Parentheses are required to disambiguate operator precedence when combining AND
and OR
operators in the same query. For example: (sender.name="users/me" OR sender.name="users/123456") AND is_unread()
. Otherwise, parentheses are optional.
The following example queries are valid:
"Pending reports" AND createTime >= "2023-01-01T00:00:00Z"
sender.name = "users/example@gmail.com"
annotations.user_mentions.user.name:"users/0987654321"
attachment:* AND space.name = "spaces/ABCDEFGH"
tasks AND is_unread() AND sender.name = "users/1234567890"
"things to do" "urgent"
(sender.name = "users/1234567890")
AND (createTime < "2023-05-01T00:00:00Z")
tasks AND space.name = "spaces/ABCDEFGH" AND has_link()
"project one" is_unread()
space.display_name:Project tasks
The maximum query length is 1,000 characters.
Invalid queries are rejected by the server with an INVALID_ARGUMENT
error.
pageSize
integer
Optional. The maximum number of results to return. The service may return fewer than this value.
If unspecified, at most 25 are returned.
The maximum value is 100. If you use a value more than 100, it's automatically changed to 100.
pageToken
string
Optional. A token, received from the previous search messages call. Provide this parameter to retrieve the subsequent page.
When paginating, all other parameters provided should match the call that provided the page token. Passing different values to the other parameters might lead to unexpected results.
orderBy
string
Optional. How the results list is ordered.
Supported attributes to order by are:
-
createTime: Sorts the results by the time of the message creation. Default value. -
relevance: Sorts the results by relevance.
The default ordering is createTime desc
. Only a single order per query ( createTime
or relevance
) is supported. Only descending order ( desc
) is supported, and it must be specified after the order attribute.
view
enum (
SearchMessagesView
)
Optional. Specifies what kind of search results view to return. The default is SEARCH_MESSAGES_VIEW_BASIC
.
Response body
Response message for searching messages.
If successful, the response body contains data with the following structure:
| JSON representation |
|---|
{
"results"
:
[
{
object (
|
| Fields | |
|---|---|
results[]
|
The list of search results that matched the query. |
nextPageToken
|
A token that can be used to retrieve the next page. If this field is empty, there are no subsequent pages. |
Authorization scopes
Requires one of the following OAuth scopes:
-
https://www.googleapis.com/auth/chat.messages -
https://www.googleapis.com/auth/chat.messages.readonly
For more information, see the Authorization guide .
SearchMessagesView
The kinds of view that are supported for partial search results.
| Enums | |
|---|---|
SEARCH_MESSAGES_VIEW_UNSPECIFIED
|
The default / unset value. The API will default to the BASIC view. |
SEARCH_MESSAGES_VIEW_BASIC
|
Includes only the matched messages in the results, but no additional metadata. This is the default value. |
SEARCH_MESSAGES_VIEW_FULL
|
Includes everything in the results: the matched messages and additional metadata. |
SearchMessageResult
A single result item from a message search.
| JSON representation |
|---|
{ "message" : { object ( |
message
object (
Message
)
The matched message.
spaceMuteSetting
enum (
MuteSetting
)
The mute setting of the calling user for the space where the message is posted. The caller app can use this information to decide how to process the message depending on whether the space is muted for the user or not.
Only returned if the request view is SEARCH_MESSAGES_VIEW_FULL
and the calling credentials include the following authorization scope
:
-
https://www.googleapis.com/auth/chat.users.spacesettings
read
boolean
Indicates if the matched message is read by the calling user.
Only returned if the request view is SEARCH_MESSAGES_VIEW_FULL
and the calling credentials include one of the following authorization scopes
:
-
https://www.googleapis.com/auth/chat.users.readstate.readonly -
https://www.googleapis.com/auth/chat.users.readstate

