Everything an AI agent can do with the Google Chat API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints32
API versionv1
Last updated23 June 2026
Orientation

How the Google Chat API works.

The Google Chat API is how an app or AI agent works with a Google Chat workspace: listing and creating spaces, reading and posting messages, managing the people in a space, and adding reactions. Access is granted through OAuth scopes, and a credential acts either as the Chat app itself or on behalf of a signed-in person, which sets what it can see and do. Activity reaches an app through event subscriptions and a Chat app's own endpoint rather than by pushing to a registered URL.

32Endpoints
7Capability groups
16Read
16Write
13Permissions
Authentication
Every call uses OAuth 2.0 and one of two modes. App authentication uses a service account so the Chat app acts as itself, with the chat.bot scope, and suits posting from a bot and reacting to interaction events. User authentication acts on behalf of a signed-in person through an OAuth consent screen, so the call is limited to what that person can see and do. Some actions, such as listing the spaces a person belongs to, are only available with user authentication.
Permissions
Scopes are granular and split by area and by read versus write. Reading messages needs chat.messages.readonly while posting needs chat.messages.create or the broader chat.messages; spaces use chat.spaces.readonly and chat.spaces; members use chat.memberships and its readonly form; reactions use chat.messages.reactions. Deleting another person's content needs the restricted chat.delete scope. App-only variants prefixed chat.app.* and admin variants prefixed chat.admin.* exist for app-managed spaces and Workspace-admin actions, and the restricted scopes require a security review before a public app can use them.
Events
Google Chat does not register a webhook URL per event the way many APIs do. A Chat app receives interaction events, like being @mentioned or added to a space, at its own configured endpoint, and broader activity arrives through Google Workspace Events API subscriptions delivered to a Pub/Sub topic. The same activity can also be pulled on demand through the space events methods, which return events such as a message created, a membership changed, or a reaction added.
Data model
Resources are addressed by name. A space is spaces/{space}, a message is spaces/{space}/messages/{message}, a membership is spaces/{space}/members/{member}, and a reaction nests under a message. Per-person read state lives under users/{user}/spaces/{space}. Methods follow create, get, list, patch, and delete, with a few custom actions such as setting up a space, completing an import, and searching messages.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to Google Chat determines what it can reach. There are several routes, each governed by the OAuth scopes the credential carries and whether it acts as the Chat app itself or on behalf of a signed-in person.

Ways to connect

REST API (v1)

The Chat REST API answers at https://chat.googleapis.com under the v1 path. It covers spaces, members, messages, reactions, attachments, space events, and read state, with each call authorized by OAuth scopes and either app or user authentication.

Best forConnecting an app or AI agent to Google Chat.
Governed byThe OAuth scopes the credential carries and whether it acts as the app or a user.
Docs ↗

MCP server (Model Context Protocol)

Google's first-party remote MCP server for Chat answers at https://chatmcp.googleapis.com/mcp/v1 and uses OAuth 2.0. It exposes tools to list messages, search messages, search conversations, and send a message. It is in Developer Preview through the Google Workspace Developer Preview Program, not yet general availability.

Best forConnecting an AI agent to Google Chat through the Model Context Protocol.
Governed byThe OAuth scopes granted at connection time.
Docs ↗

Google Workspace Events API (Pub/Sub)

Activity in a space, such as a message created or a member joining, is delivered through Google Workspace Events API subscriptions that publish to a Pub/Sub topic. This is how an app receives ongoing events without polling, in place of a per-event webhook URL.

Best forReceiving real-time space activity without polling.
Governed byThe OAuth scopes on the subscription and the space's membership.
Docs ↗

Chat app interaction endpoint

A Chat app receives interaction events, such as being @mentioned, added to a space, or a card click, at its own configured HTTP endpoint or a Pub/Sub topic. This handles direct interactions with the app rather than general space activity.

Best forResponding to direct interactions with a Chat app.
Governed byThe Chat app configuration and its authentication.
Docs ↗
Authentication

App authentication (service account)

A service account lets the Chat app act as itself with the chat.bot scope, independently of any person. It suits a bot posting messages, reacting to interaction events, and sending rich cards and interactive widgets. App-managed spaces use the chat.app.* scopes.

TokenService account OAuth token
Best forBots that act as the app itself
Docs ↗

User authentication (OAuth on behalf of a person)

An OAuth consent flow lets the app act on behalf of a signed-in person, so each call is limited to what that person can see and do. Some methods, such as listing the spaces a person belongs to, are only available with user authentication.

TokenOAuth user access token
Best forActing as a specific person, scoped to their access
Docs ↗
Capability map

What an AI agent can do in Google Chat.

The Google Chat API is split into areas an agent can act on, such as spaces, the people in them, messages, reactions, and read state. Each area has its own methods and its own scopes, and some grant access to far more than others.

Endpoint reference

Every Google Chat API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Spaces

List, read, create, set up, update, and delete spaces, find a direct message or group chat, search spaces a person belongs to, and complete an import.9

User authentication uses chat.spaces.readonly or chat.spaces; app authentication uses chat.bot. Full URL: https://www.googleapis.com/auth/chat.spaces.readonly.

Acts onspace
Permission (capability)chat.spaces.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 space reads/min per project; 15/sec per user

chat.spaces.readonly or chat.spaces with user auth; chat.bot with app auth. Full URL: https://www.googleapis.com/auth/chat.spaces.readonly.

Acts onspace
Permission (capability)chat.spaces.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 space reads/min per project

chat.spaces.create or chat.spaces with user auth; chat.app.spaces with app auth. Full URL: https://www.googleapis.com/auth/chat.spaces.create.

Acts onspace
Permission (capability)chat.spaces.create
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit60 space writes/min per project; 1/sec per user

Requires user authentication with chat.spaces.create or chat.spaces. Full URL: https://www.googleapis.com/auth/chat.spaces.create.

Acts onspace
Permission (capability)chat.spaces.create
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit60 space writes/min per project

chat.spaces with user auth; chat.app.spaces with app auth. Full URL: https://www.googleapis.com/auth/chat.spaces.

Acts onspace
Permission (capability)chat.spaces
VersionAvailable since the API’s base version
Webhook eventspace-updated
Rate limit60 space writes/min per project

Requires the restricted chat.delete scope with user auth, or chat.app.delete with app auth. Deleting a space removes its messages and members. Full URL: https://www.googleapis.com/auth/chat.delete.

Acts onspace
Permission (capability)chat.delete
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit60 space writes/min per project

Released in Developer Preview on 15 June 2026 for user authentication. Full URL: https://www.googleapis.com/auth/chat.spaces.readonly.

Acts onspace
Permission (capability)chat.spaces.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 space reads/min per project

chat.spaces.readonly or chat.spaces with user auth; chat.bot with app auth. Full URL: https://www.googleapis.com/auth/chat.spaces.readonly.

Acts onspace
Permission (capability)chat.spaces.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 space reads/min per project

Requires the restricted chat.import scope with app authentication. Full URL: https://www.googleapis.com/auth/chat.import.

Acts onspace
Permission (capability)chat.import
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit60 space writes/min per project

Members

List and read the members of a space, add a person or app to a space, update a membership, and remove a member.5

chat.memberships.readonly or chat.memberships with user auth; chat.bot with app auth. Full URL: https://www.googleapis.com/auth/chat.memberships.readonly.

Acts onmembership
Permission (capability)chat.memberships.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 membership reads/min per project

chat.memberships.readonly or chat.memberships with user auth; chat.bot with app auth. Full URL: https://www.googleapis.com/auth/chat.memberships.readonly.

Acts onmembership
Permission (capability)chat.memberships.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 membership reads/min per project

chat.memberships with user auth; chat.app.memberships with app auth. Full URL: https://www.googleapis.com/auth/chat.memberships.

Acts onmembership
Permission (capability)chat.memberships
VersionAvailable since the API’s base version
Webhook eventmembership-created
Rate limit300 membership writes/min per project; 1/sec per user

chat.memberships with user auth; chat.app.memberships with app auth. Full URL: https://www.googleapis.com/auth/chat.memberships.

Acts onmembership
Permission (capability)chat.memberships
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit300 membership writes/min per project

chat.memberships with user auth; chat.app.memberships with app auth. Full URL: https://www.googleapis.com/auth/chat.memberships.

Acts onmembership
Permission (capability)chat.memberships
VersionAvailable since the API’s base version
Webhook eventmembership-deleted
Rate limit300 membership writes/min per project

Messages

List, read, create, update, and delete messages in a space, and search messages a person can access.7

Requires user authentication with chat.messages.readonly or chat.messages. Full URL: https://www.googleapis.com/auth/chat.messages.readonly.

Acts onmessage
Permission (capability)chat.messages.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 message reads/min per project

chat.messages.readonly or chat.messages with user auth; chat.bot with app auth. Full URL: https://www.googleapis.com/auth/chat.messages.readonly.

Acts onmessage
Permission (capability)chat.messages.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 message reads/min per project

chat.messages.create or chat.messages with user auth; chat.bot with app auth, which can also send cards and interactive widgets. Full URL: https://www.googleapis.com/auth/chat.messages.create.

Acts onmessage
Permission (capability)chat.messages.create
VersionAvailable since the API’s base version
Webhook eventmessage-created
Rate limit3,000 message writes/min per project; 1/sec per space

chat.messages with user auth; chat.bot with app auth. The PUT update method behaves the same with full replacement semantics. Full URL: https://www.googleapis.com/auth/chat.messages.

Acts onmessage
Permission (capability)chat.messages
VersionAvailable since the API’s base version
Webhook eventmessage-updated
Rate limit3,000 message writes/min per project

chat.messages with user auth; chat.bot with app auth. This is the PUT form of update, alongside the PATCH form. Full URL: https://www.googleapis.com/auth/chat.messages.

Acts onmessage
Permission (capability)chat.messages
VersionAvailable since the API’s base version
Webhook eventmessage-updated
Rate limit3,000 message writes/min per project

chat.messages deletes the app's own messages; deleting another person's message needs the restricted chat.delete scope, or chat.app.delete with app auth. Full URL: https://www.googleapis.com/auth/chat.messages.

Acts onmessage
Permission (capability)chat.messages
VersionAvailable since the API’s base version
Webhook eventmessage-deleted
Rate limit3,000 message writes/min per project

Released in Developer Preview on 12 May 2026 for user authentication with chat.messages.readonly or chat.messages. Full URL: https://www.googleapis.com/auth/chat.messages.readonly.

Acts onmessage
Permission (capability)chat.messages.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 message reads/min per project

Reactions

List the reactions on a message, add a reaction, and remove a reaction.3

chat.messages.reactions.readonly, chat.messages.reactions, chat.messages.readonly, or chat.messages with user auth. Full URL: https://www.googleapis.com/auth/chat.messages.reactions.

Acts onreaction
Permission (capability)chat.messages.reactions
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 reaction reads/min per project

chat.messages.reactions, chat.messages.reactions.create, or chat.messages with user auth. Full URL: https://www.googleapis.com/auth/chat.messages.reactions.

Acts onreaction
Permission (capability)chat.messages.reactions
VersionAvailable since the API’s base version
Webhook eventreaction-created
Rate limit600 reaction writes/min per project; 5/sec per space

chat.messages.reactions or chat.messages with user auth. Full URL: https://www.googleapis.com/auth/chat.messages.reactions.

Acts onreaction
Permission (capability)chat.messages.reactions
VersionAvailable since the API’s base version
Webhook eventreaction-deleted
Rate limit600 reaction writes/min per project

Attachments & media

Read a message's attachment metadata, upload an attachment, and download attachment media.3

Requires app authentication with chat.bot. The attachment bytes are fetched separately through the media download endpoint. Full URL: https://www.googleapis.com/auth/chat.bot.

Acts onattachment
Permission (capability)chat.bot
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 attachment reads/min per project

chat.messages.create or chat.messages with user auth; chat.bot with app auth. Uses the separate upload host. Full URL: https://www.googleapis.com/auth/chat.messages.create.

Acts onattachment
Permission (capability)chat.messages.create
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit600 attachment writes/min per project

Requires app authentication with chat.bot. Full URL: https://www.googleapis.com/auth/chat.bot.

Acts onattachment
Permission (capability)chat.bot
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 attachment reads/min per project

Space events

Read a single space event and list the events in a space, covering messages, memberships, and reactions.2

Needs a scope covering the event's data, such as chat.messages.readonly for message events or chat.memberships.readonly for membership events, with the caller a member of the space. Full URL: https://www.googleapis.com/auth/chat.spaces.readonly.

Acts onspace event
Permission (capability)chat.spaces.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 reads/min per project

The filter must name at least one event type, and the credential needs a scope covering that data; the caller must be a member of the space. Full URL: https://www.googleapis.com/auth/chat.spaces.readonly.

Acts onspace event
Permission (capability)chat.spaces.readonly
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 reads/min per project

Read state

Read and update a person's read state for a space, and read their read state for a thread.3

User authentication only, with chat.users.readstate.readonly or chat.users.readstate. Full URL: https://www.googleapis.com/auth/chat.users.readstate.readonly.

Acts onread state
Permission (capability)chat.users.readstate
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 reads/min per project

User authentication only, with chat.users.readstate. Full URL: https://www.googleapis.com/auth/chat.users.readstate.

Acts onread state
Permission (capability)chat.users.readstate
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 writes/min per project

User authentication only, with chat.users.readstate.readonly or chat.users.readstate. Full URL: https://www.googleapis.com/auth/chat.users.readstate.readonly.

Acts onread state
Permission (capability)chat.users.readstate
VersionAvailable since the API’s base version
Webhook eventNone
Rate limit3,000 reads/min per project
No endpoints match those filters.
Webhooks

Webhook events.

Google Chat does not push events to a registered URL the way many APIs do. A Chat app receives interaction events at its own endpoint, and broader activity, like a message being created or a member joining, arrives through Google Workspace Events API subscriptions delivered to a Pub/Sub topic, or by querying the space events methods directly.

EventWhat it signalsTriggered by
google.workspace.chat.message.v1.createdFires when a message is created in a space the app or subscription can see. Delivered through a Google Workspace Events API subscription, and also returned by the space events list method./v1/{parent=spaces/*}/messages
google.workspace.chat.message.v1.updatedFires when a message is edited./v1/{message.name=spaces/*/messages/*}
/v1/{message.name=spaces/*/messages/*}
google.workspace.chat.message.v1.deletedFires when a message is deleted./v1/{name=spaces/*/messages/*}
google.workspace.chat.membership.v1.createdFires when a member is added to a space, including the app being added./v1/{parent=spaces/*}/members
google.workspace.chat.membership.v1.deletedFires when a member is removed from or leaves a space./v1/{name=spaces/*/members/*}
google.workspace.chat.reaction.v1.createdFires when a reaction is added to a message./v1/{parent=spaces/*/messages/*}/reactions
google.workspace.chat.reaction.v1.deletedFires when a reaction is removed from a message./v1/{name=spaces/*/messages/*/reactions/*}
google.workspace.chat.space.v1.updatedFires when a space's configuration, such as its display name, is changed./v1/{space.name=spaces/*}
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

Google Chat limits how fast an app or AI agent can call, through per-minute ceilings set per project and tighter per-second ceilings set per space and per user. Reads are allowed far more often than writes, and creating a space is the most restricted action.

Request rate

Google Chat applies quotas at three levels. Per project, each request type has a per-minute ceiling: reads of messages, memberships, spaces, attachments, and reactions each allow 3,000 per minute, while writes are tighter, with 3,000 message writes, 600 attachment writes, 600 reaction writes, 300 membership writes, and only 60 space writes per minute. On top of that, per-space and per-user ceilings cap bursts to 15 reads per second and 1 write per second, with reaction creation allowed up to 5 per second per space and up to 10 per second during a data import. Going over a quota returns the standard 429 RESOURCE_EXHAUSTED, and the call should be retried with backoff after waiting.

Pagination

List methods use token-based pagination. A request sets pageSize, and the response returns a nextPageToken that is passed back as pageToken to fetch the next page until the token is absent. For listing spaces the default pageSize is 100 and the maximum is 1,000, and a value above 1,000 is reduced to 1,000. When a filter is used, the same filter value must be sent with each page token.

Request size

Requests and responses are JSON over HTTPS. Message attachments are uploaded and downloaded through a separate media endpoint rather than inline in the message body. The reference does not state a single global request size limit; individual fields and uploads set their own ceilings.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
400INVALID_ARGUMENTThe request is malformed, such as a missing required field, a bad resource name, or an invalid filter on the space events methods.Correct the named field or parameter and resend; do not retry the same request unchanged.
401UNAUTHENTICATEDThe OAuth credential is missing, invalid, or expired, so the request is not authenticated.Obtain or refresh a valid OAuth token and send it in the Authorization header.
403PERMISSION_DENIEDThe caller is authenticated but not allowed. The token may lack the required scope, the person may not be a member of the space, or a Workspace administrator has not granted the one-time approval needed for a chat.app.* scope.Grant the missing scope, add the caller to the space, or have an administrator approve the app's scopes.
404NOT_FOUNDThe named resource does not exist, or the caller cannot see it. A space, message, or membership name that the credential has no access to returns 404.Confirm the resource name is correct and that the credential has access to it.
429RESOURCE_EXHAUSTEDA quota was exceeded, such as the per-minute project ceiling or the per-second per-space or per-user ceiling.Slow down and retry with exponential backoff after waiting; request a quota increase if the limit is hit consistently.
500INTERNALAn unexpected error occurred on Google's side while handling the request.Retry with exponential backoff; if it persists, report it through Google's support channels.
Versioning & freshness

Version history.

Google Chat exposes a single dated major version, v1, in the request path. New methods and fields ship continuously through dated release notes rather than a new version number, so an integration built on v1 keeps working as features are added.

Version history

What changed, and when

Latest versionv1
v1Current version
Google Chat API v1

The Google Chat API exposes a single dated major version, v1, in the request path. Rather than minting new version numbers, Google ships new methods and fields continuously through dated release notes, often first in a Developer Preview and later as generally available. Recent additions include searching messages and spaces, quoting and forwarding messages, message pins, and a first-party MCP server.

What changed
  • 15 June 2026 (Developer Preview): spaces.search lets a user find and manage spaces they belong to without administrator privileges
  • 12 June 2026 (GA): messages can quote a message from another space or thread by setting quoteType to FORWARD
  • 12 May 2026 (Developer Preview): messages.search lets a user search messages they have access to
  • 8 May 2026 (GA): app-authenticated apps can force or silence a message's notification via createMessageNotificationOptions
  • 22 April 2026 (Developer Preview): the Model Context Protocol server for Google Chat launched, later adding search_messages and send_message tools
2026-05
Earlier 2026 additions

Through the first half of 2026, v1 gained several capabilities without a new version number. Message search arrived in Developer Preview, app-authenticated apps gained control over a message's notification, and read-state subscriptions were added in preview, alongside the launch of the first-party MCP server.

What changed
  • 28 May 2026 (Developer Preview): subscriptions to user read-state updates, covering space and thread read state
  • 8 May 2026 (GA): createMessageNotificationOptions lets app-authenticated apps force or silence a message's notification
  • 7 May 2026 (Developer Preview): the Chat MCP server added the search_messages and send_message tools
  • 22 April 2026 (Developer Preview): the Model Context Protocol server for Google Chat launched

Features often land in a Developer Preview before reaching general availability, so a method can exist for preview-program projects before it is generally available.

Google Chat API release notes ↗
Questions

Google Chat API, answered.

App authentication or user authentication, which should I use?+
It depends on whose identity the action should carry. App authentication uses a service account so the Chat app acts as itself with the chat.bot scope, which suits a bot posting messages and responding to interaction events without any person signing in. User authentication acts on behalf of a signed-in person through an OAuth consent screen, so the call sees and changes only what that person can, and some methods, such as listing the spaces a person belongs to, are only available this way. App authentication can also send rich cards and interactive widgets that user authentication cannot.
Which scope does an agent need to read and to post messages?+
Reading messages needs chat.messages.readonly, the read-only scope for message content. Posting a message needs chat.messages.create, or the broader chat.messages scope which also covers editing and deleting. The full URL for each is https://www.googleapis.com/auth/ followed by the short name. Spaces, memberships, and reactions each have their own scopes in the same pattern, and deleting content another person created needs the restricted chat.delete scope.
How does an agent receive events instead of polling?+
Google Chat does not let an app register a single webhook URL per event. A Chat app receives interaction events, such as being @mentioned or added to a space, at its own configured HTTP endpoint or a Pub/Sub topic. For broader activity, like any message being created or a member joining, an app creates a Google Workspace Events API subscription that delivers those events to a Pub/Sub topic. The same activity can also be pulled on demand through the space events methods, which list events such as a message created, a membership changed, or a reaction added.
Does Google Chat have an official MCP server for AI agents?+
Yes. Google publishes a first-party remote Model Context Protocol server for Chat at https://chatmcp.googleapis.com/mcp/v1, which uses OAuth 2.0. It exposes tools to list messages, search messages, search conversations, and send a message, so an AI agent can read and act in Chat through the protocol. It is in Developer Preview through the Google Workspace Developer Preview Program, not yet general availability.
What are the rate limits?+
Quotas apply per project, per space, and per user. Per project, reads of messages, spaces, memberships, attachments, and reactions each allow 3,000 per minute; writes are lower, with 3,000 message writes, 600 attachment writes, 600 reaction writes, 300 membership writes, and 60 space writes per minute. Per space and per user, calls are capped to 15 reads per second and 1 write per second. Exceeding a quota returns 429 RESOURCE_EXHAUSTED, which should be retried with backoff.
Why am I getting 403 PERMISSION_DENIED when authenticating as the Chat app?+
For scopes that begin with https://www.googleapis.com/auth/chat.app., a Google Workspace administrator has to grant the app a one-time approval before it can use them. Until that approval is in place, calls return 403 PERMISSION_DENIED. The fix is for the administrator to grant the required OAuth scope to the app. The same 403 also appears when a user-authenticated call targets a space the person is not a member of.
Related

More communication API guides for agents

What is Bollard AI?

Control what every AI agent can do in Google Chat.

Bollard AI sits between a team's AI agents and Google Chat. Grant each agent exactly the access it needs, read or write, space by space, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared Google Chat credential.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
Google Chat
Ops Agent
Read messages in a space ResourceOffReadFull use
Post messages ActionOffReadFull use
Add and remove members ActionOffReadFull use
Delete spaces ActionOffReadFull use
Per-agent access, set in Bollard AI, not in Google Chat