Skip to content
206 changes: 97 additions & 109 deletions msteams-platform/graph-api/meeting-transcripts/meeting-insights.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,17 @@
title: Graph APIs to Fetch Meeting Insights
description: Learn how to use the Meeting AI Insights API to fetch Teams meeting insights including conversation summaries, action items, and mentions.
ms.localizationpriority: high
ms.topic: conceptual
ms.owner: vichug
ms.topic: article
ms.owner: vtarasov
ms.author: surbhigupta
ms.date: 05/16/2025
ms.date: 12/08/2025
---

# Get AI-generated meeting summaries with Meeting AI Insights API

> [!IMPORTANT]
>
> * Meeting AI Insights API is available under the beta version in Microsoft Graph. For more information, see [versioning, support, and breaking change policies for Microsoft Graph](/graph/versioning-and-support#beta-version).
> * Meeting AI Insights API is part of the Microsoft 365 Copilot API namespace. Insights can only be fetched on behalf of a Microsoft 365 Copilot licensed user. For more information, see [license requirements for Meeting Insights API](/graph/teams-licenses#license-requirements-for-teams-meeting-ai-insights-apis).
> * Meeting AI Insights API is part of the Microsoft 365 Copilot API namespace. You can only fetch insights on behalf of a Microsoft 365 Copilot licensed user. For more information, see [license requirements for Meeting Insights API](/graph/teams-licenses#license-requirements-for-teams-meeting-ai-insights-apis).

The Meeting AI Insights API enables you to programmatically access structured AI-generated insights from transcribed Microsoft Teams meetings. These insights include:

Expand All @@ -25,7 +24,7 @@ The API empowers you to deliver intelligent meeting experiences, such as surfaci

> [!NOTE]
>
> Meeting AI Insights API provides insights only for private scheduled meetings.
> Meeting AI Insights API provides insights for private scheduled meetings, town halls, webinars, and Meet Now sessions. AI Insights API doesn't yet support channel meetings.

## Use cases

Expand All @@ -39,134 +38,123 @@ Here are some use cases for fetching AI-generated insights using Meeting AI Insi

## Prerequisites

* You must [turn on the transcription or recording](https://support.microsoft.com/en-us/office/view-live-transcription-in-microsoft-teams-meetings-dc1a8f23-2e20-4684-885e-2152e06a4a8b) for the meeting for which the insights are to be generated. Alternatively, you can set a meeting to autotranscribe or autorecord programmatically using the [update onlineMeeting API](/graph/api/onlinemeeting-update?view=graph-rest-1.0&preserve-view=true&tabs=http) or directly through the [meeting options](/microsoftteams/manage-meeting-recording-options#record-and-transcribe-automatically).

* The Meeting AI Insights API only works with delegated permissions and hence requires a token from a signed-in user to be passed in the call. The signed-in user must have a [Microsoft 365 Copilot license](/copilot/microsoft-365/microsoft-365-copilot-licensing) and access to the meeting’s transcript file.
* You must [turn on the transcription or recording](https://support.microsoft.com/en-us/office/view-live-transcription-in-microsoft-teams-meetings-dc1a8f23-2e20-4684-885e-2152e06a4a8b) for the meeting to generate insights. Alternatively, you can set a meeting to autotranscribe or autorecord programmatically using the [update onlineMeeting API](/graph/api/onlinemeeting-update?view=graph-rest-1.0&preserve-view=true&tabs=http) or directly through the [meeting options](/microsoftteams/manage-meeting-recording-options#record-and-transcribe-automatically).

## Fetch meeting insights

To fetch the insights of a particular meeting, follow these steps:

1. If you don’t have the meeting identifier (`id`), call online meeting API with the `JoinWebUrl` property to retrieve the `id`. For more information, see [retrieve an online meeting by JoinWebUrl](/graph/api/onlinemeeting-get?view=graph-rest-1.0&preserve-view=true&tabs=http#example-3-retrieve-an-online-meeting-by-joinweburl).
1. If you don't have the meeting identifier (`id`), call online meeting API with the `JoinWebUrl` property to retrieve the `id`. For more information, see [retrieve an online meeting by JoinWebUrl](/graph/api/onlinemeeting-get?view=graph-rest-1.0&preserve-view=true&tabs=http#example-3-retrieve-an-online-meeting-by-joinweburl).

1. Each transcript event of the meeting creates an associated [AI insight object](/graph/api/resources/callaiinsight?preserve-view=true). Use the [List AI Insights API](/graph/api/onlinemeeting-list-aiinsights?preserve-view=true) to fetch all the AI insight objects related to the meeting and use the included metadata in the response to select the relevant AI insight object for your scenario. Here's an example request and response:

1. Each transcript event of the meeting creates an associated [AI insight object](/graph/api/resources/callaiinsight?view=graph-rest-beta&preserve-view=true). Use the [List AI Insights API](/graph/api/onlinemeeting-list-aiinsights?view=graph-rest-beta&preserve-view=true) to fetch all the AI insight objects related to the meeting and use the included metadata in the response to select the relevant AI insight object for your scenario. Here's an example request and response:
### Request

**Request**
```http
GET/copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights
```

```http
GET /copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights
```
### Response

**Response**
```json
HTTP/1.1 200 OK
Content-Type: application/json

```json
HTTP/1.1 200 OK
Content-Type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#copilot/users('224317f2-e936-449c-8955-978c1497ce17')/onlineMeetings('MSoyMjQzMTdmMi1lOTM2LTQ0OWMtODk1NS05NzhjMTQ5N2NlMTcqMCoqMTk6bWVldGluZ19OV0kxWXpkbVlqWXRaamRoTVMwME1UVTVMV0ZpTUdVdE9HWm1ZemRtTVRFd01qQTVAdGhyZWFkLnYy')/aiInsights",
"@odata.count": 1,
"value": [
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#copilot/users('000000000-0000-0000-0000-000000000000')/onlineMeetings('00000...')/aiInsights",
"@odata.count": 1,
"value": [
{
"id": "VjEj...",
"callId": "af630fe0-04d3-4559-8cf9-91fe45e36296",
"contentCorrelationId": "bc842d7a-2f6e-4b18-a1c7-73ef91d5c8e3",
"createdDateTime": "2025-05-09T08:17:10.7261294Z",
"endDateTime": "2025-05-09T08:17:10.7261294Z"
}
]
}
```

| Property | Description |
| --- | --- |
| `id` | A unique identifier for the generated AI insight object. |
| `callId` | A unique identifier for the call during which this insight is generated. |
| `contentCorrelationId` | A unique identifier that correlates the [transcript](/graph/api/resources/calltranscript?&view=graph-rest-beta&preserve-view=true) of the meeting from which the AI insight object is generated. |
| `createdDateTime` | The date and time at which the corresponding transcript was created. The timestamp type represents the date and time information using the ISO 8601 format and is always in Coordinated Universal Time (UTC). |
| `endDateTime` | The date and time at which the corresponding transcript ends. The timestamp type represents the date and time information using the ISO 8601 format and is always in UTC. |

1. Each AI insight object provides detailed meeting notes, action items, and participant-specific mentions, which can be accessed by calling [GET AI Insights API](/graph/api/callaiinsight-get?view=graph-rest-beta&preserve-view=true) for a specific insight object ID. Here's an example request and response:

**Request**

```http
GET /copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights/{aiInsightId}
```

**Response**

```json
HTTP/1.1 200 OK
Content-Type: application/json

"id": "VjEjI1NQT19aamRsWkRKaVlURXRPR1F3TnkwME1XVmtMVGt5TVRBdFlUQXpOMkprT1dWaFpEazFMR000TkRjeVl6TTNMV1U1TkRjdE5EWXhNUzFpWlRkaExUZ3paRGN4T1RZelpHSmhNaXhpTjJNME9UZGtNeTB5T1RZNUxUUTBZMll0T0RRM1lpMWtNMkppTmpoak9EWmtZak1fMDFLTUVLNUE1Q01SUlQzWUJXSEJISUVKVVMzT0ZBVVNRTQ==",
"callId": "97d0b60e-4341-470f-b273-ea7ddb31f8f9",
"contentCorrelationId": "fb7aa4c9-b2a0-497f-94f1-f52d1975bd3c-0",
"createdDateTime": "2025-12-08T05:41:31Z",
"endDateTime": "2025-12-08T05:41:31Z"
},
],
}
```

| Property | Description |
| --- | --- |
| `id` | A unique identifier for the generated AI insight object. |
| `callId` | A unique identifier for the call during which this insight is generated. |
| `contentCorrelationId` | A unique identifier that correlates the [transcript](/graph/api/resources/calltranscript?preserve-view=true) of the meeting from which the AI insight object is generated. |
| `createdDateTime` | The date and time at which the corresponding transcript was created. The timestamp type represents the date and time information using the ISO 8601 format and is always in Coordinated Universal Time (UTC). |
| `endDateTime` | The date and time at which the corresponding transcript ends. The timestamp type represents the date and time information using the ISO 8601 format and is always in UTC. |

1. Each AI insight object provides detailed meeting notes, action items, and participant-specific mentions, which you can access by calling [GET AI Insights API](/graph/api/callaiinsight-get?preserve-view=true) for a specific insight object ID. Here's an example request and response:

### Request

```http
GET/copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights/{aiInsightId}
```

### Response

```json
HTTP/1.1 200 OK
Content-Type: application/json

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#copilot/users('224317f2-e936-449c-8955-978c1497ce17')/onlineMeetings('MSoyMjQzMTdmMi1lOTM2LTQ0OWMtODk1NS05NzhjMTQ5N2NlMTcqMCoqMTk6bWVldGluZ19OV0kxWXpkbVlqWXRaamRoTVMwME1UVTVMV0ZpTUdVdE9HWm1ZemRtTVRFd01qQTVAdGhyZWFkLnYy')/aiInsights/$entity",
"id": "VjEjI1NQT0A2ZWMzMmU4MC1jN2U1LTQwMWUtYjE4NS01ODVjYjRkYTNiZTYsb21SalBlQTJPRTZDSnBMYmlncEtETk9YeExkcEtjOUVoSHZUdTJqSWJiTTNMRWZJUi1rUlJyNTZnOWNaWTl1aW9TdnQ5d2VON1VHU0VLQTN2WjZ0bFE=",
"callId": "97d0b60e-4341-470f-b273-ea7ddb31f8f9",
"contentCorrelationId": "fb7aa4c9-b2a0-497f-94f1-f52d1975bd3c-0",
"createdDateTime": "2025-12-08T05:41:31Z",
"endDateTime": "2025-12-08T05:41:31Z",
"meetingNotes": [
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#copilot/users('00000000-0000-0000-0000-000000000000')/onlineMeetings('000000...')/aiInsights/$entity",
"id": "Z2HWbT...",
"callId": "af630fe0-04d3-4559-8cf9-91fe45e36296",
"contentCorrelationId": "bc842d7a-2f6e-4b18-a1c7-73ef91d5c8e3",
"createdDateTime": "2025-05-15T08:17:10.7261294Z",
"endDateTime": "2025-05-15T08:32:10.7261294Z",
"meetingNotes": [
"title": "Sample Testing and Staging Code Update",
"text": "MOD discussed the process of testing a sample, confirming that it will function after updating the staging code, and outlined the necessary steps for this update.",
"subpoints": [
{
"title": "Staging Code Modification",
"text": "MOD stated that the sample will work after changing the staging code, indicating that this is the primary requirement for successful testing.",
},
{
"title": "Introducing Project Objectives and Key Stakeholders",
"text": "The stakeholders present included representatives from each department involved in the project, ensuring alignment and clear communication channels from the start.",
"subpoints": [
{
"title": "Discussion on action items",
"text": "Action items were assigned to team members, and a follow-up meeting schedule was established."
}
]
}
"title": "Beta Environment Configuration",
"text": "MOD clarified that updates are needed only in the beta environment, specifically mentioning the need to replace or update the access token and configure related settings.",
},
{
"title": "Testing Process Steps",
"text": "MOD described the process of generating the beta, suggested that another person might need to participate, and encouraged further attempts if initial tests do not succeed.",
},
],
"actionItems": [
},
{
"title": "ReadMe File Integration Issue",
"text": "MOD identified an issue related to the ReadMe file, noting that it was properly created and centrally added, which is affecting the current process.",
"subpoints": [
{
"title": "Finalize Project Timeline",
"text": "Review and finalize the project timeline to ensure alignment with stakeholder expectations and resource availability.",
"ownerDisplayName": "Bella Smith",
"title": "ReadMe File Addition",
"text": "MOD explained that the ReadMe file was properly created and centrally added, which is contributing to the observed issue in the workflow."
},
],
"viewpoint": {
"mentionEvents": [
{
"speaker": {
"application": null,
"device": null,
"user": {
"@odata.type": "#Microsoft.Teams.GraphSvc.teamworkUserIdentity",
"id": "9a7608d3-53e4-4a92-804f-ef43f1e5f5b5",
"displayName": "John Smith",
"userIdentityType": "aadUser",
"tenantId": "d1aeb56e-5a25-4d91-a4f6-0f5e6a50d887"
}
},
"eventDateTime": "2024-05-21T09:00:00",
"transcriptUtterance": "We need to get approval from Sarah Johnson before proceeding with the budget allocation."
},
]
}
}
```

| Property | Description |
| --- | --- |
| `meetingNotes` | Contains detailed notes of the meeting discussion as generated by Microsoft Teams Copilot. The notes include a title, summary, and detailed subpoints of the discussion. |
| `actionItems` | Contains the action items generated from the meeting conversation. The action items include a summary of the action item and the assigned owner. |
| `viewpoint.mentionEvents` | Contains participant-specific information from the conversation, including mentions with the timestamps in the meeting when a user is mentioned, the speaker, and the utterance details. |
},
],
}
```

| Property | Description |
| --- | --- |
| `meetingNotes` | Contains detailed notes of the meeting discussion as generated by Microsoft Teams Copilot. The notes include a title, summary, and detailed subpoints of the discussion. |
| `actionItems` | Contains the action items generated from the meeting conversation. The action items include a summary of the action item and the assigned owner. |
| `viewpoint.mentionEvents` | Contains participant-specific information from the conversation, including mentions with the timestamps in the meeting when a user is mentioned, the speaker, and the utterance details. |

## Limitations

* AI-generated insights are only available after a meeting ends. The API doesn't support accessing live notes during a meeting.
* AI-generated insights are available only after a meeting ends. The API doesn't support accessing live notes during a meeting.
* AI-generated insights might take up to four hours to be available after the call ends.
* Application-level permissions aren't supported.

## Code sample

| Sample name | Description | Node.js |
| --- | --- | --- |
| Meeting AI insights bot | This sample app retrieves meeting summaries, action items, and mentions using Meeting AI Insights API and displays them in a dialog. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-meeting-ai-insights/nodejs) |
| Sample name | Description | Node.js | Python |
| --- | --- | --- | --- |
| Meeting AI insights bot | This sample app retrieves meeting summaries, action items, and mentions by using the Meeting AI Insights API and displays them in a dialog. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-meeting-ai-insights/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-meeting-ai-insights/python) |

## See also

* [callAiInsight resource type](/graph/api/resources/callaiinsight?view=graph-rest-beta&preserve-view=true)
* [callAiInsight resource type](/graph/api/resources/callaiinsight?preserve-view=true)
* [Working with the cloud communications API in Microsoft Graph](/graph/api/resources/communications-api-overview?view=graph-rest-beta&preserve-view=true)