Obtain meeting ID and organizer ID
Your app can fetch transcripts and recordings of a meeting using the meeting ID and the user ID of the meeting organizer, also known as organizer ID. The Graph REST APIs fetch transcripts and recordings based on the meeting ID and organizer ID that are passed as parameters in the API.
Note
The meeting ID for scheduled meetings may expire in some days if it's unused. It can be revived by using the meeting URL to join the meeting. For more information about meeting expiration timeline for different meeting types, see meeting expiration.
To obtain meeting ID and organizer ID for fetching the transcript and recording, choose one of the two ways:
Subscribe to change notifications
You can subscribe your app to receive change notifications for scheduled meeting events. When your app is notified about the subscribed meeting events, it can obtain transcripts and recordings, if it's authorized via required Microsoft Entra permissions.
Your app receives notification for the type of meeting events for which it's subscribed:
When your app is notified of a subscribed meeting event, it can retrieve the meeting ID and organizer ID from the notification message. Based on the meeting details obtained, your app can fetch the meeting transcripts and recordings after the meeting has ended.
Obtain meeting details using user-level notification
Choose to subscribe your app to user-level notifications for getting transcripts and recordings of a particular user's meeting event. When a meeting is scheduled for that user, your app is notified. Your app can receive meeting notifications using calendar events as well.
For subscribing your app to calendar events, see change notifications for Outlook resources in Microsoft Graph.
Use the following example to subscribe to user-level notifications:
POST https://graph.microsoft.com/v1.0/subscriptions/
{
"changeType": "created,updated,deleted",
"notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
"resource": "users('1273a016-201d-4f95-8083-1b7f99b3edeb')/events",
"expirationDateTime": "2022-05-05T14:58:56.7951795+00:00",
"clientState": "ClientSecret",
"includeResourceData": false
}
When your app is notified about a subscribed meeting event, it looks for calendar event ID in the notification. Use the event ID to get JoinWebUrl
for retrieving a specific chat ID and subscribing to its messages. After your app has subscribed to the chat messages, follow the steps given for tenant-level notifications to obtain meeting ID and organizer ID.
To obtain meeting ID and organizer ID from user-level notification:
Get event ID: Your app gets the
eventId
property from the notification payload.Example: Notification payload
{ "subscriptionId": "ef30cdc6-b5ae-4702-b924-f458fd9e5fc3", "changeType": "created", "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34", "clientState": "ClientSecret", "subscriptionExpirationDateTime": "2022-05-05T07:54:53.1886542-07:00", "resource": "Users/1273a016-201d-4f95-8083-1b7f99b3edeb/Events/AAMkADY0NjM1MjRhLTNiNjAtNDBiOC1hYTQxLThkMjAxN2QzMjZhYQBGAAAAAAC03Gz8aL_JQp2Kxvw5a29SBwDFFWHjtoMRTqdrVyQ1h8yLAAAAAAENAADFFWHjtoMRTqdrVyQ1h8yLAAFwC7nAAAA=", "resourceData": {} }
In this example, the
eventID
contained withinresource
is AAMkADY0NjM1MjRhLTNiNjAtNDBiOC1hYTQxLThkMjAxN2QzMjZhYQBGAAAAAAC03Gz8aL_JQp2Kxvw5a29SBwDFFWHjtoMRTqdrVyQ1h8yLAAAAAAENAADFFWHjtoMRTqdrVyQ1h8yLAAFwC7nAAAA=.Get meeting URL: Use the event ID to retrieve
joinUrl
that contains the meeting URL.For more information, see get event.
Use the following example to request the meeting URL:
GET https://graph.microsoft.com/v1.0/users/1273a016-201d-4f95-8083-1b7f99b3edeb/events/AAMkADY0NjM1MjRhLTNiNjAtNDBiOC1hYTQxLThkMjAxN2QzMjZhYQBGAAAAAAC03Gz8aL_JQp2Kxvw5a29SBwDFFWHjtoMRTqdrVyQ1h8yLAAAAAAENAADFFWHjtoMRTqdrVyQ1h8yLAAFwC7nAAAA=
The response payload contains
joinURL
.Example: Response payload for getting meeting URL
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('1273a016-201d-4f95-8083-1b7f99b3edeb')/events/$entity", "@odata.etag": "W/\"xRVh47aDEU6na1ckNYfMiwABb2Twsg==\"", "id": "AAMkADY0NjM1MjRhLTNiNjAtNDBiOC1hYTQxLThkMjAxN2QzMjZhYQBGAAAAAAC03Gz8aL_JQp2Kxvw5a29SBwDFFWHjtoMRTqdrVyQ1h8yLAAAAAAENAADFFWHjtoMRTqdrVyQ1h8yLAAFwC7nAAAA=", "start": { "dateTime": "2022-05-06T15:00:00.0000000", "timeZone": "UTC" }, "end": { "dateTime": "2022-05-06T15:30:00.0000000", "timeZone": "UTC" }, "onlineMeeting": { "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MjExYzJiMTItZDY1MS00ZGZkLWE5YzQtZTBmNWI1MDg2M2Uw%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%221273a016-201d-4f95-8083-1b7f99b3edeb%22%7d", "conferenceId": "438824583", "tollNumber": "+1 213-279-1007" } }
The meeting URL is contained in
joinUrl
.Get chat thread ID: Use the meeting URL obtained in
joinUrl
to get the chat thread ID. Specify this meeting URL as value for thejoinWebUrl
parameter while fetching the related meeting.Use the following example to request the thread ID:
GET https://graph.microsoft.com/v1.0/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings?$filter=JoinWebUrl%20eq%20'https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d'
The response payload contains the
threadID
member in thechatInfo
property.Example: Response payload with thread ID
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings", "value": [ { "id": "MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19NVE01T1RZM01HVXRObVk0TWkwMFlqZzRMVGsyTURVdFkySXlaR1JsTm1VMVpqQTJAdGhyZWFkLnYy", "creationDateTime": "2022-04-26T07:41:17.3736455Z", "startDateTime": "2022-04-26T10:30:00Z", "endDateTime": "2022-04-26T11:00:00Z", "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d", "joinWebUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d", "chatInfo": { "threadId": "19:meeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2@thread.v2", "messageId": "0", "replyChainMessageId": null } } ] }
The chat ID is contained in
threadId
.Subscribe to chat messages: Use chat ID to subscribe your app to receive chat messages for that particular meeting. For more information, see subscribe to messages in a chat.
If you want your app to subscribe to messages with specific text, see subscribe to messages in a chat that contain certain text.
Follow steps for tenant-level notifications to obtain meeting ID and organizer ID.
Obtain meeting details using tenant-level notification
Tenant-level notifications are useful if your app is authorized to access all meeting transcripts and recordings across the tenant. Subscribe your app to be notified for events when transcription and recording starts or call ends for scheduled online Teams meetings. After the meeting ends, your app can access and retrieve the meeting transcript and recording.
For subscribing your app to tenant-level notifications, see get change notifications.
When your app is notified about subscribed meeting events, it searches through the notifications for:
- Transcription started events.
- Meeting ended events.
These events contain the chat ID, which is used to obtain chat entity, and eventually meeting ID and organizer ID.
To obtain meeting ID and organizer ID from tenant-level notification:
Get chat ID: Your app gets the
chatId
property from the notification to make subsequent calls. Your app can get the chat ID from the payloads of:Transcription started event:
callTranscriptEventMessageDetail
event typeExample: Payload for transcription started event
{ "subscriptionId": "1217470f-564c-4fe3-b51f-ebd962cb8797", "changeType": "created", "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34", "resource": "chats('19:meeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk@thread.v2')/messages('1649787549174')", "contentDecryptedBySimulator": { "@odata.context": "https://graph.microsoft.com/$metadata#chats('19%3Ameeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk%40thread.v2')/messages/$entity", "messageType": "systemEventMessage", "createdDateTime": "2022-04-12T18:19:09.174Z", "lastModifiedDateTime": "2022-04-12T18:19:09.174Z", "chatId": "19:meeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk@thread.v2", "body": { "contentType": "html", "content": "<systemEventMessage/>" }, "channelIdentity": null, "eventDetail": { "@odata.type": "#Microsoft.Teams.GraphSvc.callTranscriptEventMessageDetail", "callId": "16481de8-3262-419b-abc7-0139e6239515", "callTranscriptICalUid": "", "meetingOrganizer": { "application": null, "device": null, "user": { "userIdentityType": "aadUser", "id": "14b779ae-cb64-47e7-a512-52fd50a4154d", "displayName": null } } } }, "encryptedContent": {} }
Call ended event:
callEndedEventMessageDetail
event typeExample: Payload for call ended event
{ "subscriptionId": "1217470f-564c-4fe3-b51f-ebd962cb8797", "changeType": "created", "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34", "resource": "chats('19:meeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk@thread.v2')/messages('1649787585457')", "resourceData": {}, "contentDecryptedBySimulator": { "@odata.context": "https://graph.microsoft.com/$metadata#chats('19%3Ameeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk%40thread.v2')/messages/$entity", "createdDateTime": "2022-04-12T18:19:45.457Z", "lastModifiedDateTime": "2022-04-12T18:19:45.457Z", "chatId": "19:meeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk@thread.v2", "eventDetail": { "@odata.type": "#Microsoft.Teams.GraphSvc.callEndedEventMessageDetail", "callId": null, "callDuration": "PT1M44S", "callEventType": "meeting", "callParticipants": [ ], "initiator": { } } }, "encryptedContent": { } }
Get chat entity: Your app can retrieve the chat entity using the chat ID obtained in Step 1. Use the chat entity to get the URL for joining the call. The
joinWebUrl
member of theonlineMeetingInfo
property contains this URL, and is used to obtain meeting ID eventually. The organizer ID is also a part of the response payload.For more information about chat entity, see get chat.
Use the following example to request chat entity based on the chat ID:
GET https://graph.microsoft.com/v1.0/chats/19:meeting_NmU0NTkxYzMtM2Y2My00NzRlLWFmN2YtNTFiMGM5OWM3ZjY2@thread.v2
The response payload contains the following elements:
Organizer ID: It's contained in the
id
member of theorganizer
property in the response payload.URL for meeting call: This URL is used to retrieve the meeting ID, and it's available in the response payload in one of the two scenarios:
- If the meeting is an online Teams meeting, the
joinWebUrl
member of theonlineMeetingInfo
property contains this URL. - If the meeting wasn't created as an online meeting from Teams client or Outlook client, it contains the
calendarEventId
member in theonlineMeetingInfo
property. Your app can use thecalendarEventId
to obtainjoinUrl
, which is the same asjoinWebUrl
.
For more information about events, see get event.
Examples for response payload scenarios depending on the type of join meeting URL:
Online Teams meeting where
joinWebUrl
is availableExample: Response payload for online meeting
{ "@odata.context": "https://graph.microsoft.com/beta/$metadata#chats/$entity", "id": "19:meeting_NmU0NTkxYzMtM2Y2My00NzRlLWFmN2YtNTFiMGM5OWM3ZjY2@thread.v2", "topic": "Test Meet Create Online Meeting", "createdDateTime": "2022-04-14T11:30:45.903Z", "lastUpdatedDateTime": "2022-04-26T06:27:45.265Z", "chatType": "meeting", "webUrl": "https://teams.microsoft.com/l/chat/19%3Ameeting_NmU0NTkxYzMtM2Y2My00NzRlLWFmN2YtNTFiMGM5OWM3ZjY2%40thread.v2/0?tenantId=2432b57b-0abd-43db-aa7b-16eadd115d34", "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34", "viewpoint": null, "onlineMeetingInfo": { "calendarEventId": null, "joinWebUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_NmU0NTkxYzMtM2Y2My00NzRlLWFmN2YtNTFiMGM5OWM3ZjY2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d", "organizer": { "id": "14b779ae-cb64-47e7-a512-52fd50a4154d", "displayName": null, "userIdentityType": "aadUser" } } }
Meeting scheduled through Teams client or Outlook client, not marked as an online meeting where
calendarEventId
is availableExample: Response payload for meeting not marked as online
{ "@odata.context": "https://graph.microsoft.com/beta/$metadata#chats/$entity", "id": "19:meeting_YzM1NGFiZWYtOGFiOS00NjM5LTg4OTktYmU0MjI4NTQyNGZm@thread.v2", "topic": "Non Online Meeting Teams Client", "createdDateTime": "2022-04-26T09:43:23.711Z", "lastUpdatedDateTime": "2022-04-26T09:43:46.157Z", "chatType": "meeting", "webUrl": "https://teams.microsoft.com/l/chat/19%3Ameeting_YzM1NGFiZWYtOGFiOS00NjM5LTg4OTktYmU0MjI4NTQyNGZm%40thread.v2/0?tenantId=2432b57b-0abd-43db-aa7b-16eadd115d34", "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34", "viewpoint": null, "onlineMeetingInfo": { "calendarEventId": "AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQBGAAAAAAD3AG5jNnlgQJvdCL_KgXJIBwBsww5BlIxtT7iFyYWrXV3AAAAAAAENAABsww5BlIxtT7iFyYWrXV3AAACSDwYeAAA=", "joinWebUrl": null, "organizer": { "id": "14b779ae-cb64-47e7-a512-52fd50a4154d", "displayName": null, "userIdentityType": "aadUser" } } }
Use the following example to get
joinWebUrl
from thecalendarEventId
:GET https://graph.microsoft.com/beta/users/14b779ae-cb64-47e7-a512-52fd50a4154d/events/AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQBGAAAAAAD3AG5jNnlgQJvdCL_KgXJIBwBsww5BlIxtT7iFyYWrXV3AAAAAAAENAABsww5BlIxtT7iFyYWrXV3AAACSDwYdAAA=
In this example:
- The organizer ID is 14b779ae-cb64-47e7-a512-52fd50a4154d.
The response payload of this request contains
joinUrl
in theonlineMeeting
property.Note
joinUrl
is the same asjoinWebUrl
.
Example: Response payload that contains the URL to join meeting
{ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('14b779ae-cb64-47e7-a512-52fd50a4154d')/events/$entity", "@odata.etag": "W/\"bMMOQZSMbU+4hcmFq11dwAAAkc3Tmw==\"", "id": "AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQBGAAAAAAD3AG5jNnlgQJvdCL_KgXJIBwBsww5BlIxtT7iFyYWrXV3AAAAAAAENAABsww5BlIxtT7iFyYWrXV3AAACSDwYdAAA=", "start": { "dateTime": "2022-04-26T10:30:00.0000000", "timeZone": "UTC" }, "end": { "dateTime": "2022-04-26T11:00:00.0000000", "timeZone": "UTC" }, "onlineMeeting": { "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d" }, "calendar@odata.associationLink": "https://graph.microsoft.com/beta/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/calendars('AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQAuAAAAAAD3AG5jNnlgQJvdCL_KgXJIAQBsww5BlIxtT7iFyYWrXV3AAAAAAAENAAA=')/$ref", "calendar@odata.navigationLink": "https://graph.microsoft.com/beta/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/calendars('AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQAuAAAAAAD3AG5jNnlgQJvdCL_KgXJIAQBsww5BlIxtT7iFyYWrXV3AAAAAAAENAAA=')" }
- If the meeting is an online Teams meeting, the
Get meeting ID: Now, your app can use
joinWebUrl
to get the meeting ID.Use the following example to request the online meeting ID:
GET https://graph.microsoft.com/beta/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings?$filter=JoinWebUrl%20eq%20'https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d'
The response payload contains the meeting ID in the
id
member of thevalue
property.Example: Response payload with meeting ID
{ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings", "value": [ { "id": "MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19NVE01T1RZM01HVXRObVk0TWkwMFlqZzRMVGsyTURVdFkySXlaR1JsTm1VMVpqQTJAdGhyZWFkLnYy", "creationDateTime": "2022-04-26T07:41:17.3736455Z", "startDateTime": "2022-04-26T10:30:00Z", "endDateTime": "2022-04-26T11:00:00Z", "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d", "joinWebUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d", "chatInfo": { "threadId": "19:meeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2@thread.v2", "messageId": "0", "replyChainMessageId": null } } ] }
Fetch transcript or recording: The organizer ID and meeting ID obtained in the Steps 2 and 3 let your app fetch the transcripts or recordings for that particular meeting event.
To fetch transcripts, you'll need to:
Retrieve transcript ID based on organizer ID and meeting ID:
Use the following example to request the transcript ID:
GET https://graph.microsoft.com/beta/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings('MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM1pqWTJAdGhyZWFkLnYy')/transcripts
In this example:
- The meeting ID is included as the value for
onlineMeetings
: MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bW VldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM 1pqWTJAdGhyZWFkLnYy. - The organizer ID is 14b779ae-cb64-47e7-a512-52fd50a4154d.
The response payload contains the transcript ID for the meeting ID and organizer ID in the
id
member of thevalue
property.Example: Response payload for getting transcript ID
{ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings('MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM1pqWTJAdGhyZWFkLnYy')/transcripts", "@odata.count": 1, "value": [ { "id": "MSMjMCMjMDEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh", "createdDateTime": "2022-04-14T11:34:39.5662792Z" } ] }
In this example, the transcript ID is MSMjMCMjMDEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh.
- The meeting ID is included as the value for
Access and get meeting transcript based on the transcript ID:
Use the following example to request the transcripts for a specific meeting in the
.vtt
format:GET https://graph.microsoft.com/beta/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings('MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM1pqWTJAdGhyZWFkLnYy')/transcripts('MSMjMCMjMDEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh')/content?$format=text/vtt
The response payload contains the transcripts in the
.vtt
format.
To fetch recordings, you'll need to:
Retrieve recording ID based on organizer ID and meeting ID:
Use the following example to request the recording ID:
GET https://graph.microsoft.com/beta/users/b935e675-5e67-48b9-8d45-249d5f88e964/onlineMeetings/MSpiOTM1ZTY3NS01ZTY3LTQ4YjktOGQ0NS0yNDlkNWY4OGU5NjQqMCoqMTk6bWVldGluZ19ZbU0zTnpJNU9USXRZakU0WlMwME1tUTNMVGt6TVRRdFkyWm1PRGRtWmpsaVptRTNAdGhyZWFkLnYy/recordings/
In this example:
- The meeting ID is included as the value for
onlineMeetings
: MSpiOTM1ZTY3NS01ZTY3LTQ4YjktOGQ0NS0yNDlkNWY4OGU5NjQqMCoqMTk6bWVl dGluZ19ZbU0zTnpJNU9USXRZakU0WlMwME1tUTNMVGt6TVRRdFkyWm1 PRGRtWmpsaVptRTNAdGhyZWFkLnYy. - The organizer ID is b935e675-5e67-48b9-8d45-249d5f88e964.
The response payload contains the recording ID for the meeting ID and organizer ID in the
id
member of thevalue
property.Example: Response payload for getting recording ID
{ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('b935e675-5e67-48b9-8d45-249d5f88e964')/onlineMeetings('MSpiOTM1ZTY3NS01ZTY3LTQ4YjktOGQ0NS0yNDlkNWY4OGU5NjQqMCoqMTk6bWVldGluZ19ZbU0zTnpJNU9USXRZakU0WlMwME1tUTNMVGt6TVRRdFkyWm1PRGRtWmpsaVptRTNAdGhyZWFkLnYy')/recordings", "@odata.count": 1, "value": [ { "id": "7e31db25-bc6e-4fd8-96c7-e01264e9b6fc", "createdDateTime": "2023-04-10T08:13:17.5990966Z" } ] }
In this example, the recording ID is 7e31db25-bc6e-4fd8-96c7-e01264e9b6fc.
- The meeting ID is included as the value for
Access and get meeting recording based on the recording ID:
Use the following example to request the recordings for a specific meeting in the
.mp4
format:GET https://graph.microsoft.com/beta/users/b935e675-5e67-48b9-8d45-249d5f88e964/onlineMeetings/MSpiOTM1ZTY3NS01ZTY3LTQ4YjktOGQ0NS0yNDlkNWY4OGU5NjQqMCoqMTk6bWVldGluZ19ZbU0zTnpJNU9USXRZakU0WlMwME1tUTNMVGt6TVRRdFkyWm1PRGRtWmpsaVptRTNAdGhyZWFkLnYy/recordings/7e31db25-bc6e-4fd8-96c7-e01264e9b6fc/content?$format=video/mp4
The response payload contains the recordings in the
.mp4
format.
Use Bot Framework to get meeting ID and organizer ID
Your app can use the Bot Framework for obtaining meeting ID and organizer ID. The bot can receive meeting start or end events automatically from all the scheduled online meetings.
Use the following example to obtain meeting ID and organizer ID using a bot app:
GET /v1/meetings/{meetingId}
The response payload contains:
- The meeting ID in the
msGraphResourceId
member of thedetails
property. - The organizer ID in the
id
member of theorganizer
property.
Example: Response payload for getting meeting details
{
details: {
id: "MCMxOTptZWV0aW5nX05XTTFNVEk1TnpNdE5qZ3pNeTAwWVdRNExUaG1PV1F0WlRnM01UQm1PVGczWW1VekB0aHJlYWQudjIjMA==",
msGraphResourceId: "MSo2NzAyYWZiNi0xMDliLTRjMzItYTE0MS02ZTY1NDY5NTAyYjkqMCoqMTk6bWVldGluZ19OV00xTVRJNU56TXROamd6TXkwMFlXUTRMVGhtT1dRdFpUZzNNVEJtT1RnM1ltVXpAdGhyZWFkLnYy",
scheduledStartTime: {
},
scheduledEndTime: {
},
joinUrl: "https://teams.microsoft.com/l/meetup-join/19%3ameeting_NWM1MTI5NzMtNjgzMy00YWQ4LThmOWQtZTg3MTBmOTg3YmUz%40thread.v2/0?context=%7b%22Tid%22%3a%22b3cdf1c8-024a-49e2-a994-f67f830b02f3%22%2c%22Oid%22%3a%226702afb6-109b-4c32-a141-6e65469502b9%22%7d",
title: "Testing meeting bot 1 - Hun",
type: "Scheduled",
},
conversation: {
id: "19:meeting_NWM1MTI5NzMtNjgzMy00YWQ4LThmOWQtZTg3MTBmOTg3YmUz@thread.v2",
isGroup: true,
conversationType: "groupChat",
},
organizer: {
id: "29:1VZkVr77S3GW_RdAXKrfgFeytpqMegL3tkKvEbwrPqoCVvmqrlKtVrfKWUY7xIM-bZIx4Sq-p1MjdjSZnb5W20w",
tenantId: "b3cdf1c8-024a-49e2-a994-f67f830b02f3",
aadObjectId: "6702afb6-109b-4c32-a141-6e65469502b9",
},
}
In this example:
- The meeting ID is included as the value for
msGraphResourceId
: MSo2NzAyYWZiNi0xMDliLTRjMzItYTE0MS02ZTY1NDY5NTAyYjkqMCoqMTk6bWVl dGluZ19OV00xTVRJNU56TXROamd6TXkwMFlXUTRMVGhtT1dRdFpUZzNNVEJtT1RnM 1ltVXpAdGhyZWFkLnYy. - The organizer ID is contained as the value for
aadObjectId
fororganizer
: 6702afb6-109b-4c32-a141-6e65469502b9.
After your app obtains the meeting ID and the organizer ID, it triggers the Graph APIs to fetch transcript content and recording using these meeting details.
Code samples
You can try the following code sample for a bot app:
Sample name | Description | .NET | Node.js |
---|---|---|---|
Meeting transcription | This is a sample application which demonstrates how to get meeting transcript using Graph API and show it in the dialog (referred as task module in TeamsJS v1.x). | View | View |
Meeting transcript and recording | This is a sample application which demonstrates how to get meeting transcript and recording using Graph API. | View | View |
Tab Meeting Recording and transcript with auto recording | This code sample demonstrates how to build and configure a meeting app for auto recording and auto transcription. | View | - |