Share via

Graph API returns 403 on meeting transcript for forwarded recurring meeting occurrence — works for single meetings

Prekshi Vyas 20 Reputation points
2026-03-05T16:34:54.0033333+00:00

When a user is forwarded a single occurrence of a recurring Teams meeting (not the whole series), accepts it, and the meeting is recorded with transcription, the Microsoft Graph API returns 403 Forbidden when that user tries to access the transcript.

The same flow works correctly for non-recurring (single) meetings.

To Reproduce

  1. User A creates a recurring Teams meeting (e.g., weekly) with transcription enabled
  2. User B (an attendee) forwards one occurrence to User C
  3. User C accepts the forwarded occurrence
  4. The occurrence is recorded with transcription
  5. User C calls GET /me/onlineMeetings?$filter=JoinWebUrl eq '<url>'

Expected: User C gets the meeting metadata (and can subsequently retrieve the transcript) Actual: 403 Forbidden"3003: User does not have access to lookup meeting"

  1. If step 1 is changed to a single (non-recurring) meeting, the same flow succeeds for User C.

API calls used

GET /me/onlineMeetings?$filter=JoinWebUrl eq 'https://teams.microsoft.com/l/meetup-join/...'

Environment

  • Microsoft Graph API v1.0
  • Delegated permissions: OnlineMeetings.Read, OnlineMeetingTranscript.Read.All
  • Tenant: Single-tenant Azure AD app

Hypothesis

It appears that when a single occurrence of a recurring meeting is forwarded, the onlineMeetings resource for that occurrence does not update its participant list to include the new attendee — even though the calendar event occurrence does show them as an attendee. This causes the API to reject transcript access.

Impact

Users who are forwarded individual occurrences of recurring meetings (a very common enterprise pattern) cannot access meeting transcripts programmatically, even though they can see the transcript in the Teams UI.

Microsoft Teams | Development
Microsoft Teams | Development

Building, integrating, or customizing apps and workflows within Microsoft Teams using developer tools and APIs

0 comments No comments
{count} votes

Answer accepted by question author
  1. Vergil-V 10,340 Reputation points Microsoft External Staff Moderator
    2026-03-06T03:01:30.7666667+00:00

    Hi @Prekshi Vyas 

    Thank you for reaching out to the Microsoft Q&A forum. 

    I appreciate the clear details in your description. I followed your steps and can confirm that the same behavior occurs on my side as well. 

    Based on additional testing and research, the 403 Forbidden error with the message “3003: User does not have access to lookup meeting” only appears when a single occurrence of a recurring meeting is forwarded, rather than forwarding the entire series. 

    When I forward the full series to user C, the Get onlineMeeting endpoint returns a successful response.  Similarly, when I manually add user C as an attendee to the online meeting that previously triggered the 3003 error, the Get onlineMeeting endpoint also succeeds. For reference, here is the PATCH request used: 

    PATCH /users/{userId}/onlineMeetings/{meetingId} 
    { 
        "participants": { 
            "attendees": [ 
                { 
                    "identity": { 
                        "user": { 
                            "id": "{userId}" 
                        } 
                    }, 
                    "upn": "{userPrincipalName}", 
                    "role": "attendee" 
                } 
            ] 
        } 
    } 
    

    These results strongly indicate that user C is not treated as an attendee when only the single event occurrence is accepted, which explains why the lookup fails in that scenario. 

    For additional background on the 3003 error, you may find this discussion helpful: Issue with Microsoft Graph API call to retrieve online meeting information - User does not have acc… 

    I hope this provides more insight into the behavior you are seeing.  If you have any new findings or need further clarification, please feel free to share. 


    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


1 additional answer

Sort by: Most helpful
  1. Q&A Assist
    2026-03-05T16:35:19.6666667+00:00
    AI generated content. This question contains an answer created with AI from Q&A Assist. Learn more

    The described behavior is not documented as supported and aligns with current limitations of the online meeting artifact/export APIs and access model.

    From the available documentation:

    1. Access to transcripts and recordings is governed by meeting participation and organizer context
      • Transcripts and recordings are exposed via online meeting artifact APIs (for example, getAllTranscripts, getAllRecordings, and meeting‑scoped transcript/recording collections) and are tied to the online meeting object and its organizer.
      • The documentation emphasizes organizer- and tenant-scoped export paths, and app-/user-scoped export paths, but does not describe support for dynamically extending access based on forwarded single occurrences of a recurring series.
    2. Online meeting artifact APIs have known limitations
      • There are known issues with the APIs that export online meeting artifacts (transcripts/recordings), including:
        • Change tracking (/delta) returning already-synced items when other meeting properties change (such as participants).
        • getAllRecordings not returning recordings for meetings without transcription enabled.
        • Pagination issues when using $top.
      • These issues indicate that participant and artifact export behavior is still constrained and not fully aligned with all calendar scenarios.
    3. Forwarded occurrences vs. onlineMeeting participant model
      • The question’s hypothesis—that the onlineMeetings resource for a forwarded occurrence of a recurring meeting does not update its participant list to include the newly forwarded attendee—matches the observed 403 (3003: User does not have access to lookup meeting).
      • The documentation provided does not describe any mechanism or guarantee that forwarding a single occurrence of a recurring meeting updates the online meeting’s participant list in a way that would grant Graph-based access to transcripts for that forwarded attendee.
    4. Practical implications
      • Because access checks for GET /me/onlineMeetings?$filter=JoinWebUrl eq '<url>' are based on the online meeting’s access model (organizer/participants) rather than the calendar item alone, a user who is only added via a forwarded single occurrence of a recurring series may not be recognized as an authorized participant for the online meeting object.
      • This explains why:
        • Non‑recurring (single) meetings work: the forward likely results in the user being recognized as a participant on that specific online meeting instance.
        • Forwarded single occurrences of a recurring series fail: the underlying online meeting object for the series/occurrence does not treat the forwarded user as a participant for Graph access purposes.
    5. Workarounds and design guidance (within documented capabilities) Within the documented capabilities, the following patterns are supported and avoid this edge case:
      • Use organizer- or tenant-scoped export APIs to retrieve transcripts/recordings and then apply application-side authorization logic:
        • Tenant-level export paths such as:
          • communications/onlineMeetings/getAllTranscripts
          • communications/onlineMeetings/getAllRecordings
        • User-scoped export paths for the organizer:
          • users/{userId}/onlineMeetings/getAllTranscripts
          • users/{userId}/onlineMeetings/getAllRecordings
      • Use app-scoped export paths when a Teams app is installed in the meeting:
        • appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTranscripts
        • appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings
      • For client applications that must respect per-user access, implement a service that:
        1. Retrieves transcripts/recordings via organizer/tenant/app-scoped APIs.
        2. Enforces business rules about who can see which artifacts (for example, aligning with what is visible in Teams UI) instead of relying on GET /me/onlineMeetings for forwarded-occurrence attendees.
    6. Status
      • The provided documentation and known-issues list do not describe a fix or supported pattern that would allow a user, added only via a forwarded single occurrence of a recurring meeting, to call GET /me/onlineMeetings?$filter=JoinWebUrl ... and access the transcript directly.
      • This scenario should therefore be treated as a limitation of the current Graph online meeting/transcript access model. For product behavior changes or bug confirmation, the appropriate next step is to open a support case or file feedback through the Microsoft Graph/Teams developer support channels, referencing the 403 3003 behavior and the forwarded-occurrence scenario.

    References:

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.