Microsoft Teams Bot Framework API

API for building conversational bots that interact with users in Microsoft Teams through the Bot Framework.

AsyncAPI Specification

microsoft-teams-asyncapi.yaml Raw ↑
asyncapi: 2.6.0
info:
  title: Microsoft Teams Event Surface
  version: 1.0.0
  description: |
    AsyncAPI 2.6 description of the asynchronous event surface for Microsoft
    Teams. Two distinct delivery channels are modeled:

      1. Microsoft Graph change notifications - HTTPS webhook deliveries that
         Microsoft Graph POSTs to a subscriber-owned `notificationUrl` (and an
         optional `lifecycleNotificationUrl`) when subscribed Teams resources
         (chats, channels, teams, chat messages, conversation members, call
         recordings, call transcripts, Teams app installations) change.
      2. Bot Framework activities - HTTPS deliveries that the Teams channel of
         the Azure Bot Service POSTs to the bot's messaging endpoint when a
         user (or Teams itself) triggers a conversation event (message,
         conversationUpdate, messageReaction, installationUpdate, invoke,
         event, typing, messageUpdate, messageDelete).

    Resource paths, change types, payload shapes, and bot activity event types
    are taken from the public Microsoft Learn documentation:

      - https://learn.microsoft.com/en-us/graph/teams-change-notification-in-microsoft-teams-overview
      - https://learn.microsoft.com/en-us/graph/teams-changenotifications-chatmessage
      - https://learn.microsoft.com/en-us/graph/change-notifications-lifecycle-events
      - https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/subscribe-to-conversation-events
      - https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/conversation-basics
      - https://learn.microsoft.com/en-us/microsoftteams/platform/resources/bot-v3/bots-notifications

    No event types, resource paths, or activity names are invented; everything
    here is grounded in the source documentation.
  contact:
    name: Microsoft Graph / Microsoft Teams Platform
    url: https://learn.microsoft.com/en-us/graph/teams-concept-overview
  license:
    name: Microsoft Learn Terms of Use
    url: https://learn.microsoft.com/en-us/legal/termsofuse
  externalDocs:
    description: Change notifications for Microsoft Teams resources
    url: https://learn.microsoft.com/en-us/graph/teams-change-notification-in-microsoft-teams-overview
  tags:
    - name: microsoft-graph
    - name: change-notifications
    - name: webhooks
    - name: bot-framework
    - name: teams

defaultContentType: application/json

servers:
  subscriberWebhook:
    url: '{notificationUrl}'
    protocol: https
    description: |
      Subscriber-owned HTTPS endpoint registered as `notificationUrl` (and
      optionally `lifecycleNotificationUrl`) on a Microsoft Graph subscription.
      Microsoft Graph POSTs change notification batches to this URL.
    variables:
      notificationUrl:
        default: https://webhook.example.com/api/resourceNotifications
        description: HTTPS endpoint configured on the subscription resource.
  botMessagingEndpoint:
    url: '{botEndpoint}'
    protocol: https
    description: |
      Bot messaging endpoint registered with the Azure Bot Service. The Teams
      channel POSTs Bot Framework Activity objects to this URL.
    variables:
      botEndpoint:
        default: https://bot.example.com/api/messages
        description: HTTPS endpoint configured on the bot registration.

channels:
  # ------------------------------------------------------------------
  # Microsoft Graph change notification channels
  # ------------------------------------------------------------------
  graph/teams/getAllMessages:
    description: |
      Subscribe to chat messages across all channels in all teams in the
      tenant. Resource path: `/teams/getAllMessages`. Supports
      `includeResourceData: true` with encryption.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantChannelMessages
      summary: All channel messages across the tenant
      tags:
        - name: chatMessage
        - name: tenant-scope
      message:
        $ref: '#/components/messages/ChatMessageNotification'

  graph/chats/getAllMessages:
    description: |
      Subscribe to chat messages across all chats in the tenant. Resource
      path: `/chats/getAllMessages`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantChatMessages
      summary: All chat messages across the tenant
      tags:
        - name: chatMessage
        - name: tenant-scope
      message:
        $ref: '#/components/messages/ChatMessageNotification'

  graph/teams/{teamId}/channels/{channelId}/messages:
    description: |
      Subscribe to messages and replies in a specific channel. Resource
      path: `/teams/{team-id}/channels/{channel-id}/messages`. Supports
      `$search` and `$filter=mentions/...` query parameters.
    parameters:
      teamId:
        $ref: '#/components/parameters/teamId'
      channelId:
        $ref: '#/components/parameters/channelId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveChannelMessages
      summary: Messages and replies in a specific channel
      tags:
        - name: chatMessage
        - name: channel-scope
      message:
        $ref: '#/components/messages/ChatMessageNotification'

  graph/chats/{chatId}/messages:
    description: |
      Subscribe to messages in a specific chat. Resource path:
      `/chats/{chat-id}/messages`.
    parameters:
      chatId:
        $ref: '#/components/parameters/chatId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveChatMessages
      summary: Messages in a specific chat
      tags:
        - name: chatMessage
        - name: chat-scope
      message:
        $ref: '#/components/messages/ChatMessageNotification'

  graph/users/{userId}/chats/getAllMessages:
    description: |
      Subscribe to chat messages across all chats a particular user is part
      of. Resource path: `/users/{user-id}/chats/getAllMessages`.
    parameters:
      userId:
        $ref: '#/components/parameters/userId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveUserChatMessages
      summary: All chat messages for a specific user
      tags:
        - name: chatMessage
        - name: user-scope
      message:
        $ref: '#/components/messages/ChatMessageNotification'

  graph/appCatalogs/teamsApps/{teamsAppId}/installedToChats/getAllMessages:
    description: |
      Subscribe to chat messages across all chats in the tenant where a
      specific Teams app is installed. Resource path:
      `/appCatalogs/teamsApps/{teams-app-id}/installedToChats/getAllMessages`.
    parameters:
      teamsAppId:
        $ref: '#/components/parameters/teamsAppId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveAppInstalledChatMessages
      summary: Chat messages in chats where a Teams app is installed
      tags:
        - name: chatMessage
        - name: app-scope
      message:
        $ref: '#/components/messages/ChatMessageNotification'

  graph/teams/getAllChannels:
    description: |
      Subscribe to changes to channels across all teams. Resource path:
      `/teams/getAllChannels`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantChannelChanges
      summary: Channel resource changes across the tenant
      tags:
        - name: channel
        - name: tenant-scope
      message:
        $ref: '#/components/messages/ChannelNotification'

  graph/teams/{teamId}/channels:
    description: |
      Subscribe to channel changes within a specific team. Resource path:
      `/teams/{id}/channels`.
    parameters:
      teamId:
        $ref: '#/components/parameters/teamId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTeamChannelChanges
      summary: Channel resource changes within a specific team
      tags:
        - name: channel
        - name: team-scope
      message:
        $ref: '#/components/messages/ChannelNotification'

  graph/chats:
    description: |
      Subscribe to changes to any chat in the tenant. Resource path:
      `/chats`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantChatChanges
      summary: Chat resource changes across the tenant
      tags:
        - name: chat
        - name: tenant-scope
      message:
        $ref: '#/components/messages/ChatNotification'

  graph/chats/{chatId}:
    description: |
      Subscribe to changes to a specific chat. Resource path: `/chats/{id}`.
    parameters:
      chatId:
        $ref: '#/components/parameters/chatId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveChatChanges
      summary: Changes to a specific chat resource
      tags:
        - name: chat
      message:
        $ref: '#/components/messages/ChatNotification'

  graph/appCatalogs/teamsApps/{teamsAppId}/installedToChats:
    description: |
      Subscribe to chat changes for chats in which a specific Teams app is
      installed. Resource path:
      `/appCatalogs/teamsApps/{id}/installedToChats`.
    parameters:
      teamsAppId:
        $ref: '#/components/parameters/teamsAppId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveAppInstalledChatChanges
      summary: Chat changes for chats where a Teams app is installed
      tags:
        - name: chat
        - name: app-scope
      message:
        $ref: '#/components/messages/ChatNotification'

  graph/teams:
    description: |
      Subscribe to changes to any team in the tenant. Resource path: `/teams`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantTeamChanges
      summary: Team resource changes across the tenant
      tags:
        - name: team
        - name: tenant-scope
      message:
        $ref: '#/components/messages/TeamNotification'

  graph/teams/{teamId}:
    description: |
      Subscribe to changes to a specific team. Resource path: `/teams/{id}`.
    parameters:
      teamId:
        $ref: '#/components/parameters/teamId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTeamChanges
      summary: Changes to a specific team resource
      tags:
        - name: team
      message:
        $ref: '#/components/messages/TeamNotification'

  graph/teams/{teamId}/members:
    description: |
      Subscribe to membership changes in a specific team. Resource path:
      `/teams/{id}/members`.
    parameters:
      teamId:
        $ref: '#/components/parameters/teamId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTeamMemberChanges
      summary: Conversation member changes in a specific team
      tags:
        - name: conversationMember
        - name: team-scope
      message:
        $ref: '#/components/messages/ConversationMemberNotification'

  graph/chats/{chatId}/members:
    description: |
      Subscribe to membership changes in a specific chat. Resource path:
      `/chats/{id}/members`.
    parameters:
      chatId:
        $ref: '#/components/parameters/chatId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveChatMemberChanges
      summary: Conversation member changes in a specific chat
      tags:
        - name: conversationMember
        - name: chat-scope
      message:
        $ref: '#/components/messages/ConversationMemberNotification'

  graph/chats/getAllMembers:
    description: |
      Subscribe to membership changes in all chats. Resource path:
      `/chats/getAllMembers`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveAllChatMemberChanges
      summary: Conversation member changes across all chats
      tags:
        - name: conversationMember
        - name: tenant-scope
      message:
        $ref: '#/components/messages/ConversationMemberNotification'

  graph/teams/{teamId}/channels/getAllMembers:
    description: |
      Subscribe to membership changes in all channels under a specific team.
      Resource path: `teams/{id}/channels/getAllMembers`.
    parameters:
      teamId:
        $ref: '#/components/parameters/teamId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTeamChannelMemberChanges
      summary: Conversation member changes across all channels in a team
      tags:
        - name: conversationMember
        - name: team-scope
      message:
        $ref: '#/components/messages/ConversationMemberNotification'

  graph/teams/getAllChannels/getAllMembers:
    description: |
      Subscribe to membership changes in all channels across the tenant.
      Resource path: `teams/getAllChannels/getAllMembers`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantChannelMemberChanges
      summary: Conversation member changes across all channels in the tenant
      tags:
        - name: conversationMember
        - name: tenant-scope
      message:
        $ref: '#/components/messages/ConversationMemberNotification'

  graph/appCatalogs/teamsApps/{teamsAppId}/installedToChats/getAllMembers:
    description: |
      Subscribe to membership changes for chats in the tenant where a specific
      Teams app is installed. Resource path:
      `/appCatalogs/teamsApps/{id}/installedToChats/getAllMembers`.
    parameters:
      teamsAppId:
        $ref: '#/components/parameters/teamsAppId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveAppInstalledChatMemberChanges
      summary: Member changes for chats where a Teams app is installed
      tags:
        - name: conversationMember
        - name: app-scope
      message:
        $ref: '#/components/messages/ConversationMemberNotification'

  graph/appCatalogs/teamsApps/{teamsAppId}/installations:
    description: |
      Subscribe to install, upgrade, and delete events for a specific Teams
      app. Resource path:
      `/appCatalogs/teamsApps/{teams-app-id}/installations`.
    parameters:
      teamsAppId:
        $ref: '#/components/parameters/teamsAppId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTeamsAppInstallations
      summary: Teams app installation lifecycle events
      tags:
        - name: teamsAppInstallation
      message:
        $ref: '#/components/messages/TeamsAppInstallationNotification'

  graph/communications/onlineMeetings/getAllRecordings:
    description: |
      Subscribe to call recordings becoming available across all online
      meetings in the organization. Resource path:
      `communications/onlineMeetings/getAllRecordings`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantOnlineMeetingRecordings
      summary: Online meeting recordings across the organization
      tags:
        - name: callRecording
        - name: tenant-scope
      message:
        $ref: '#/components/messages/CallRecordingNotification'

  graph/communications/onlineMeetings/{onlineMeetingId}/recordings:
    description: |
      Subscribe to recordings for a specific online meeting. Resource path:
      `communications/onlineMeetings/{onlineMeetingId}/recordings`.
    parameters:
      onlineMeetingId:
        $ref: '#/components/parameters/onlineMeetingId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveOnlineMeetingRecordings
      summary: Recordings for a specific online meeting
      tags:
        - name: callRecording
      message:
        $ref: '#/components/messages/CallRecordingNotification'

  graph/users/{userId}/onlineMeetings/getAllRecordings:
    description: |
      Subscribe to call recordings for meetings organized by a specific user.
      Resource path: `users/{userId}/onlineMeetings/getAllRecordings`.
    parameters:
      userId:
        $ref: '#/components/parameters/userId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveUserOnlineMeetingRecordings
      summary: Online meeting recordings for a specific organizer
      tags:
        - name: callRecording
        - name: user-scope
      message:
        $ref: '#/components/messages/CallRecordingNotification'

  graph/appCatalogs/teamsApps/{teamsAppId}/installedToOnlineMeetings/getAllRecordings:
    description: |
      Subscribe to recordings in meetings where a specific Teams app is
      installed. Resource path:
      `appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings`.
    parameters:
      teamsAppId:
        $ref: '#/components/parameters/teamsAppId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveAppInstalledOnlineMeetingRecordings
      summary: Meeting recordings where a Teams app is installed
      tags:
        - name: callRecording
        - name: app-scope
      message:
        $ref: '#/components/messages/CallRecordingNotification'

  graph/communications/adhocCalls/getAllRecordings:
    description: |
      Subscribe to recordings for all ad hoc calls (PSTN, 1:1, group calls)
      in the organization. Resource path:
      `communications/adhocCalls/getAllRecordings`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantAdhocCallRecordings
      summary: Recordings for ad hoc calls across the organization
      tags:
        - name: callRecording
        - name: tenant-scope
      message:
        $ref: '#/components/messages/CallRecordingNotification'

  graph/communications/adhocCalls/{adhocCallId}/recordings:
    description: |
      Subscribe to recordings for a specific ad hoc call. Resource path:
      `communications/adhocCalls/{adhocCallId}/recordings`.
    parameters:
      adhocCallId:
        $ref: '#/components/parameters/adhocCallId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveAdhocCallRecordings
      summary: Recordings for a specific ad hoc call
      tags:
        - name: callRecording
      message:
        $ref: '#/components/messages/CallRecordingNotification'

  graph/users/{userId}/adhocCalls/getAllRecordings:
    description: |
      Subscribe to recordings for ad hoc calls initiated by a specific user.
      Resource path: `users/{userId}/adhocCalls/getAllRecordings`.
    parameters:
      userId:
        $ref: '#/components/parameters/userId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveUserAdhocCallRecordings
      summary: Recordings for ad hoc calls initiated by a user
      tags:
        - name: callRecording
        - name: user-scope
      message:
        $ref: '#/components/messages/CallRecordingNotification'

  graph/communications/onlineMeetings/getAllTranscripts:
    description: |
      Subscribe to call transcripts for all online meetings in the
      organization. Resource path:
      `communications/onlineMeetings/getAllTranscripts`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantOnlineMeetingTranscripts
      summary: Online meeting transcripts across the organization
      tags:
        - name: callTranscript
        - name: tenant-scope
      message:
        $ref: '#/components/messages/CallTranscriptNotification'

  graph/communications/onlineMeetings/{onlineMeetingId}/transcripts:
    description: |
      Subscribe to transcripts for a specific online meeting. Resource path:
      `communications/onlineMeetings/{onlineMeetingId}/transcripts`.
    parameters:
      onlineMeetingId:
        $ref: '#/components/parameters/onlineMeetingId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveOnlineMeetingTranscripts
      summary: Transcripts for a specific online meeting
      tags:
        - name: callTranscript
      message:
        $ref: '#/components/messages/CallTranscriptNotification'

  graph/users/{userId}/onlineMeetings/getAllTranscripts:
    description: |
      Subscribe to transcripts for meetings organized by a specific user.
      Resource path: `users/{userId}/onlineMeetings/getAllTranscripts`.
    parameters:
      userId:
        $ref: '#/components/parameters/userId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveUserOnlineMeetingTranscripts
      summary: Online meeting transcripts for a specific organizer
      tags:
        - name: callTranscript
        - name: user-scope
      message:
        $ref: '#/components/messages/CallTranscriptNotification'

  graph/appCatalogs/teamsApps/{teamsAppId}/installedToOnlineMeetings/getAllTrancripts:
    description: |
      Subscribe to transcripts in meetings where a specific Teams app is
      installed. Resource path:
      `appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTrancripts`
      (note the spelling used by the documentation).
    parameters:
      teamsAppId:
        $ref: '#/components/parameters/teamsAppId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveAppInstalledOnlineMeetingTranscripts
      summary: Meeting transcripts where a Teams app is installed
      tags:
        - name: callTranscript
        - name: app-scope
      message:
        $ref: '#/components/messages/CallTranscriptNotification'

  graph/communications/adhocCalls/getAllTranscripts:
    description: |
      Subscribe to transcripts for all ad hoc calls in the organization.
      Resource path: `communications/adhocCalls/getAllTranscripts`.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveTenantAdhocCallTranscripts
      summary: Transcripts for ad hoc calls across the organization
      tags:
        - name: callTranscript
        - name: tenant-scope
      message:
        $ref: '#/components/messages/CallTranscriptNotification'

  graph/communications/adhocCalls/{adhocCallId}/transcripts:
    description: |
      Subscribe to transcripts for a specific ad hoc call. Resource path:
      `communications/adhocCalls/{adhocCallId}/transcripts`.
    parameters:
      adhocCallId:
        $ref: '#/components/parameters/adhocCallId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveAdhocCallTranscripts
      summary: Transcripts for a specific ad hoc call
      tags:
        - name: callTranscript
      message:
        $ref: '#/components/messages/CallTranscriptNotification'

  graph/users/{userId}/adhocCalls/getAllTranscripts:
    description: |
      Subscribe to transcripts for ad hoc calls initiated by a specific user.
      Resource path: `users/{userId}/adhocCalls/getAllTranscripts`.
    parameters:
      userId:
        $ref: '#/components/parameters/userId'
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveUserAdhocCallTranscripts
      summary: Transcripts for ad hoc calls initiated by a user
      tags:
        - name: callTranscript
        - name: user-scope
      message:
        $ref: '#/components/messages/CallTranscriptNotification'

  graph/lifecycle:
    description: |
      Deliveries to the `lifecycleNotificationUrl` for any Teams subscription.
      Lifecycle notifications signal subscription state changes
      (`reauthorizationRequired`, `subscriptionRemoved`, `missed`) and contain
      no resource data.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveLifecycleNotifications
      summary: Subscription lifecycle notifications
      tags:
        - name: lifecycle
      message:
        $ref: '#/components/messages/LifecycleNotification'

  graph/validation:
    description: |
      Graph validation handshake. When a subscription is created or updated,
      Microsoft Graph sends a `POST` with `validationToken` query parameter
      that the endpoint must echo back as text/plain within 10 seconds.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveValidationRequest
      summary: Subscription endpoint validation handshake
      tags:
        - name: validation
      message:
        $ref: '#/components/messages/ValidationRequest'

  # ------------------------------------------------------------------
  # Bot Framework activity channels
  # ------------------------------------------------------------------
  bot/activities:
    description: |
      The Teams channel of the Azure Bot Service POSTs Bot Framework Activity
      objects to the bot's messaging endpoint. The `type` discriminator
      identifies the kind of activity; for `conversationUpdate` and `event`
      activities, the `channelData.eventType` discriminator further
      identifies Teams-specific sub-events.
    bindings:
      http:
        type: request
        method: POST
    subscribe:
      operationId: receiveBotActivity
      summary: Bot Framework Activity delivered to the bot endpoint
      tags:
        - name: bot-framework
      message:
        oneOf:
          - $ref: '#/components/messages/MessageActivity'
          - $ref: '#/components/messages/MessageUpdateActivity'
          - $ref: '#/components/messages/MessageDeleteActivity'
          - $ref: '#/components/messages/ConversationUpdateActivity'
          - $ref: '#/components/messages/MessageReactionActivity'
          - $ref: '#/components/messages/InstallationUpdateActivity'
          - $ref: '#/components/messages/TypingActivity'
          - $ref: '#/components/messages/InvokeActivity'
          - $ref: '#/components/messages/EventActivity'

components:
  parameters:
    teamId:
      description: Microsoft Graph identifier of a team.
      schema:
        type: string
    channelId:
      description: Microsoft Graph identifier of a channel.
      schema:
        type: string
    chatId:
      description: Microsoft Graph identifier of a chat.
      schema:
        type: string
    userId:
      description: Microsoft Graph identifier of a user.
      schema:
        type: string
    teamsAppId:
      description: Microsoft Graph identifier of a Teams app in the app catalog.
      schema:
        type: string
    onlineMeetingId:
      description: Identifier of an online meeting.
      schema:
        type: string
    adhocCallId:
      description: Identifier of an ad hoc call.
      schema:
        type: string

  messages:
    ChatMessageNotification:
      name: chatMessageChangeNotification
      title: chatMessage change notification
      summary: |
        Notification payload for changes on the chatMessage resource. The
        resource may be in a channel or chat context. When
        `includeResourceData` is true on the subscription, `encryptedContent`
        carries the AES-encrypted chatMessage payload.
      contentType: application/json
      tags:
        - name: chatMessage
      payload:
        $ref: '#/components/schemas/ChangeNotificationCollection'
      examples:
        - name: channelMessageCreatedWithoutResourceData
          summary: Channel message created (no resource data)
          payload:
            value:
              - subscriptionId: 9f9d1ed0-c9cc-42e7-8d80-a7fc4b0cda3c
                changeType: created
                tenantId: 72f988bf-86f1-41af-91ab-2d7cd011db47
                clientState: secretClientState
                subscriptionExpirationDateTime: '2021-02-02T11:26:41.0537895-08:00'
                resource: teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')
                resourceData:
                  id: '1612293113399'
                  '@odata.type': '#Microsoft.Graph.chatMessage'
                  '@odata.id': teams('fbe2bf47-16c8-47cf-b4a5-4b9b187c508b')/channels('19:4a95f7d8db4c4e7fae857bcebe0623e6@thread.tacv2')/messages('1612293113399')

    ChannelNotification:
      name: channelChangeNotification
      title: channel change notification
      contentType: application/json
      tags:
        - name: channel
      payload:
        $ref: '#/components/schemas/ChangeNotificationCollection'

    ChatNotification:
      name: chatChangeNotification
      title: chat change notification
      contentType: application/json
      tags:
        - name: chat
      payload:
        $ref: '#/components/schemas/ChangeNotificationCollection'

    TeamNotification:
      name: teamChangeNotification
      title: team change notification
      contentType: application/json
      tags:
        - name: team
      payload:
        $ref: '#/components/schemas/ChangeNotificationCollection'

    ConversationMemberNotification:
      name: conversationMemberChangeNotification
      title: conversationMember change notification
      contentType: application/json
      tags:
        - name: conversationMember
      payload:
        $ref: '#/components/schemas/ChangeNotificationCollection'

    TeamsAppInstallationNotification:
      name: teamsAppInstallationChangeNotification
      title: teamsAppInstallation change notification
      contentType: application/json
      tags:
        - name: teamsAppInstallation
      payload:
        $ref: '#/components/schemas/ChangeNotificationCollection'

    CallRecordingNotification:
      name: callRecordingChangeNotification
      title: callRecording change notification
      contentType: application/json
      tags:
        - name: callRecording
      payload:
        $ref: '#/components/schemas/ChangeNotificationCollection'

    CallTranscriptNotification:
      name: callTranscriptChangeNotification
      title: callTranscript change notification
      contentType: application/json
      tags:
        - name: callTranscript
      payload:
        $ref: '#/components/schemas/ChangeNotificationCollection'

    LifecycleNotification:
      name: lifecycleNotification
      title: Subscription lifecycle notification
      summary: |
        Subscription lifecycle event. The `lifecycleEvent` value is one of
        `reauthorizationRequired`, `subscriptionRemoved`, or `missed`.
        Subscribers must respond with HTTP 202 within 30 seconds.
      contentType: application/json
      tags:
        - name: lifecycle
      payload:
        $ref: '#/components/schemas/LifecycleNotificationCollection'
      examples:
        - name: reauthorizationRequired
          summary: Reauthorization required
          payload:
            value:
              - subscriptionId: 7c0d4e7f-1234-4abc-9def-1122334455aa
                subscriptionExpirationDateTime: '2019-03-20T11:00:00.0000000Z'
                tenantId: 72f988bf-86f1-41af-91ab-2d7cd011db47
                clientState: secretClientState
                lifecycleEvent: reauthorizationRequired

    ValidationRequest:
      name: validationRequest
      title: Subscription endpoint validation request
      summary: |
        Sent by Microsoft Graph with the `validationToken` query parameter
        when a subscription is created or updated. The endpoint must respond
        within 10 seconds with HTTP 200 and `text/plain` body equal to the
        URL-decoded `validationToken`.
      contentType: text/plain
      headers:
        type: object
        properties:
          Content-Type:
            type: string
            enum: [text/plain]
      payload:
        type: object
        properties:
          validationToken:
            type: string
            description: Token (passed as query parameter) that must be echoed back.

    MessageActivity:
      name: messageActivity
      title: Bot Framework message activity
      contentType: application/json
      tags:
        - name: bot-framework
        - name: message
      payload:
        $ref: '#/components/schemas/MessageActivity'

    MessageUpdateActivity:
      name: messageUpdateActivity
    

# --- truncated at 32 KB (50 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/microsoft-teams/refs/heads/main/asyncapi/microsoft-teams-asyncapi.yaml