description: We are implementing an integration where a Teams App (using App-Only Authentication) needs to programmatically access meeting transcripts.
We have completed the following setup:
Environment Setup:
Authentication Mode: App-only (using client credentials flow)
App Registration: Done in Azure AD with necessary Microsoft Graph API permissions.
Permissions Granted:
OnlineMeetings.ReadBasic.Chat
OnlineMeetings.Read.Chat
Calls.AccessMedia.All
CallRecords.Read.All
OnlineMeetings.Read.All
OnlineMeetingTranscript.Read.All
Chat.Read.All
All permissions are granted admin consent.
RSC Policy Configuration:
We created and applied a Resource-Specific Consent (RSC) policy using the following PowerShell script:
# Step 1: Connect to Microsoft Teams
Import-Module MicrosoftTeams
Connect-MicrosoftTeams
# Step 2: Define policy and app details
$policyName = "OrgTranscriptPolicy"
$appId = "<YOUR_AZURE_APP_ID>"
# Step 3: Required permissions
$resourceSpecificPermissions = @(
"OnlineMeetings.ReadBasic.Chat",
"OnlineMeetings.Read.Chat",
"Calls.AccessMedia.All",
"CallRecords.Read.All",
"OnlineMeetings.Read.All",
"OnlineMeetingTranscript.Read.All",
"Chat.Read.All"
)
$policyJson = @{
Version = "1.0"
Permissions = $resourceSpecificPermissions | ForEach-Object {
@{
ResourceAppId = "00000003-0000-0000-c000-000000000000"
ResourceAccess = @(@{ Id = ""; Type = "Role" })
}
}
} | ConvertTo-Json -Depth 5
Step 4: Create policy
try {
New-CsApplicationAccessPolicy -Identity $policyName -AppIds $appId -Description "Access to online meetings and transcripts"
Write-Output "RSC Policy '$policyName' created successfully."
} catch {
Write-Warning " Policy may already exist. Skipping creation."
}
Step 5: Assign policy to user
$userEmail = "<USER_EMAIL>"
Grant-CsApplicationAccessPolicy -PolicyName $policyName -Identity $userEmail
Write-Output "Policy assigned to $userEmail."
Test Scenario:
A user (with policy assigned) created a Teams meeting via calendar.
During the meeting, recording and transcript were enabled.
After the meeting, the transcript is visible as an attachment in the chat section of the meeting.
Issue:
We are trying to programmatically access the transcript file via Microsoft Graph API.
From the chat messages API (/chats/{chatId}/messages) and few other apis, we are able to retrieve the attachment with transcriptContentUrl.(which looks like a OneDrive or SharePoint link).
However, when trying to access the transcriptContentUrl, it returns status 200 but no content.
The transcript opens and displays fine in the Teams client, but we are unable to fetch its contents via API using app-only token.
Clarification Requested:
Where exactly is the transcript stored? (Is it OneDrive, Exchange, or somewhere else?)
Who has access to the file by default? (Is it limited to meeting organizer/participants only?)
How can we access the transcript contents via Microsoft Graph using our app-only auth setup?
Is there a step-by-step API sequence or documentation to access the actual transcript content programmatically, not just metadata or file reference?
Is any additional permission or scope required to access the contents of transcript?
Expected Outcome:
We would like to access the actual transcript text or file content using Graph API in a secure and Microsoft-recommended manner, using the app's delegated permissions or app-only token.
Please advise on:
The correct approach and API endpoints.
Whether RSC or Graph API limitations are causing this issue.
Any missing permissions or policy configuration.