All integrations

Microsoft Teams Chat

MICROSOFT 365 · MESSAGING

Send and read chat messages as the person, not as a shared bot.

Connect Microsoft Teams Chat with Fabriq Developer

Your user consents at Microsoft Teams Chat. The credential lands in a vault your agent cannot read, and the tool list it gets back is the intersection of that user’s grant and the agent’s own scopes.

provider “microsoft_chat”
from af_sdk import AgenticFabriq

af = AgenticFabriq()                      # reads AF_APP_ID / AF_APP_SECRET

url = await af.initiate_connection(request, provider="microsoft_chat")   # consent at Microsoft Teams Chat
return redirect(url)

async with await af.for_user(request) as session:
    tools = await session.get_tools()     # only what this user granted

Provider names are surfaces, not vendors, and the authoritative list is the capabilities endpoint rather than any page including this one — an unknown name returns 400 with the valid list. Fabriq Developer is free to start and needs no provider paperwork. Start free or read the quickstart.

Connecting Microsoft Teams Chat in practice

Teams throttles on four independent dimensions at once — per app, per app per tenant, per resource and per user — and the one that bites is per resource: posting a message is 1 request per second per channel or per chat. On top of that a sustained rate of roughly 83 percent of the listed limit is evaluated over a longer window, so running continuously at the published number still throttles.

Scopes that draw scrutiny

  • ChannelMessage.Read.All Admin consent required for both the delegated and the application form. It reads channel messages across the tenant, which is what a retrieval agent wants and what a compliance team asks about.
  • Chat.Read.All Application permission only — there is no delegated variant — and it requires admin consent. Private chat content has no user-scoped route.
  • User.Read.All Admin consent for both forms; needed to resolve message authors to people, so it usually rides along with the message scopes.

Rate limits

  • POST /teams/{team-id}/channels/{channel-id}/messages: 500 rps per app, 50 rps per app per tenant, 1 rps per channel, 1 rps per user.
  • POST /chats/{chat-id}/messages: 200 rps per app, 20 rps per app per tenant, 1 rps per chat, 1 rps per user.
  • Adding members: POST /teams/{team-id}/members and POST /chats/{chat-id}/members are 4 requests per minute per team or chat.
  • Default limits for anything unlisted: GET 1,500 rps per app and 30 per app per tenant; POST, PUT and PATCH 300 and 30; DELETE 150 and 15.
  • Bulk export: getAllMessages is 1,000 rps per app and 200 rps per app per tenant.

Who has to approve

The Teams message permissions all require tenant admin consent in Microsoft Entra. Separately, Microsoft documents that "Some metered APIs and services in Microsoft Graph are protected and require additional validation beyond permissions and admin consent. Before you can use these protected APIs, you must submit a request."

Worth knowing

  • A request is throttled when it exceeds any one of the four dimensions, so the design target is the lowest limit your call pattern touches, not the headline per-app number.
  • Since 25 August 2025 the Teams APIs are no longer metered and the model query parameter is ignored when supplied, so older integration guides that configure billing are out of date.
  • Bulk provisioning is minutes, not seconds: 4 member additions per minute per team means a 200-person migration is a scheduled job.
  • Posting to one busy channel is capped at 1 rps per channel no matter how much per-tenant headroom the app has, so fan-out has to be across conversations.

Checked against Microsoft Graph service-specific throttling limits (2026-09-29), Microsoft Graph permissions reference (2026-09-29), Metered APIs and services in Microsoft Graph (2026-09-29)

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

microsoft_chat_add_chat_memberWRITE

Add a user to a Teams chat. Requires Chat.ReadWrite.

Chat.ReadWrite
microsoft_chat_create_chatWRITE

Create a new Teams group or one-on-one chat.

Chat.Create
microsoft_chat_delete_chat_messageWRITE

Delete a message from a Teams chat. Requires Chat.ReadWrite.

Chat.ReadWrite
microsoft_chat_get_chatREAD

Get a specific Teams chat.

Chat.ReadBasic
microsoft_chat_get_multiple_users_presenceREAD

Get presence status for multiple users in a single call. Requires Presence.Read.All.

Presence.Read.All
microsoft_chat_get_user_presenceREAD

Get the presence status (online, busy, away, etc.) for a user. Requires Presence.Read for self, or Presence.Read.All for other users.

Presence.Read
microsoft_chat_list_chat_membersREAD

List members of a Teams chat. Requires Chat.ReadBasic.

Chat.ReadBasic
microsoft_chat_list_chat_messagesREAD

List messages in a Teams chat.

Chat.ReadBasic
microsoft_chat_list_chatsREAD

List the user's Microsoft Teams chats (direct messages and group DMs).

Chat.ReadBasic
microsoft_chat_list_message_repliesREAD

List replies to a message in a Teams chat. Requires Chat.Read.

Chat.Read
microsoft_chat_list_pinned_messagesREAD

List pinned messages in a Teams chat. Requires Chat.Read.

Chat.Read
microsoft_chat_mark_chat_readWRITE

Mark all messages in a Teams chat as read for the current user. Requires Chat.ReadWrite.

Chat.ReadWrite
microsoft_chat_pin_messageWRITE

Pin a message in a Teams chat. Requires Chat.ReadWrite.

Chat.ReadWrite
microsoft_chat_remove_chat_memberWRITE

Remove a member from a Teams chat. Requires Chat.ReadWrite.

Chat.ReadWrite
microsoft_chat_reply_to_chat_messageWRITE

Reply to a specific message in a Teams chat. Requires ChatMessage.Send.

ChatMessage.Send
microsoft_chat_resolve_users_for_chatREAD

Search for users by name or email to get their IDs before adding them to a chat. Requires User.ReadBasic.All.

User.ReadBasic.All
microsoft_chat_send_chat_messageWRITE

Send a message in a Teams chat.

Chat.ReadWrite
microsoft_chat_unpin_messageWRITE

Unpin a message from a Teams chat. Requires Chat.ReadWrite.

Chat.ReadWrite
microsoft_chat_update_chat_messageWRITE

Edit a sent message in a Teams chat. Requires Chat.ReadWrite.

Chat.ReadWrite

Put Microsoft Teams Chat behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.