{"record":{"id":"b8227b96bdb84ed4","repo":"calcom/cal.diy","slug":"meeting-not-found","errorCode":null,"errorMessage":"Meeting not found","messagePattern":"Meeting not found","errorType":"http","errorClass":"NotFoundException","httpStatus":404,"severity":"warning","filePath":"apps/api/v2/src/modules/cal-unified-calendars/services/google-calendar.service.ts","lineNumber":58,"sourceCode":"\n    const ownerUserEmail = bookingReference?.booking?.user?.email;\n\n    // Get authenticated calendar instance\n    const calendar = await this.getAuthorizedCalendarInstance(\n      ownerUserEmail,\n      bookingReference.credential?.key,\n      bookingReference.delegationCredential\n    );\n\n    try {\n      const event = await calendar.events.get({\n        calendarId: bookingReference?.externalCalendarId ?? \"primary\",\n        eventId: bookingReference?.uid,\n        // fields: \"id,status,created,updated,summary,description,location,creator,organizer,start,end,attendees,conferenceData\"\n      });\n\n      if (!event.data) {\n        throw new NotFoundException(\"Meeting not found\");\n      }\n      return event.data as GoogleCalendarEventResponse;\n    } catch (error) {\n      throw new NotFoundException(\"Failed to retrieve meeting details\");\n    }\n  }\n\n  async updateEventDetails(\n    eventUid: string,\n    updateData: UpdateUnifiedCalendarEventInput\n  ): Promise<GoogleCalendarEventResponse> {\n    const bookingReference =\n      await this.bookingReferencesRepository.getBookingReferencesIncludeSensitiveCredentials(eventUid);\n\n    if (!bookingReference) {\n      throw new NotFoundException(\"Booking reference not found\");\n    }\n","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/calcom/cal.diy/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/modules/cal-unified-calendars/services/google-calendar.service.ts#L40-L76","documentation":"GoogleCalendarService.getEventDetails throws NotFoundException('Meeting not found') when the Google Calendar API returns a successful response with no event.data. This branch is reached when the calendar.events.get call resolves but yields an empty body — the event id does not exist in the target calendar.","triggerScenarios":"The booking reference exists, but the external Google Calendar event it points to (bookingReference.uid in externalCalendarId) has been deleted or moved outside the queried calendar.","commonSituations":"The event was deleted directly in Google Calendar after booking; the event was moved to another calendar; the externalCalendarId on the reference is stale (calendar deleted/recreated).","solutions":["Verify the event still exists in the Google Calendar UI for the credential's account.","If the event was deleted, clear or recreate the booking reference accordingly.","Check externalCalendarId on the reference — if stale, update it to the correct calendar id."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Before fetching details, ensure the external event still exists\nconst exists = await calendar.events.get({ calendarId, eventId }).then(r => !!r.data).catch(() => false);\nif (!exists) throw new Error('Meeting no longer exists in Google Calendar');","typeGuard":null,"tryCatchPattern":"try {\n  return await api.v2.calUnified.getEvent(eventUid);\n} catch (err) {\n  if (err?.statusCode === 404 && /Meeting not found/i.test(err?.message)) {\n    // mark the booking reference as externally-deleted and move on\n  }\n  throw err;\n}","preventionTips":["When an event is deleted in Google, clear the booking reference accordingly.","Keep externalCalendarId on the reference in sync with the live calendar.","Handle 'event gone' as a permanent state, not a retryable one."],"tags":["calendar","google-calendar","not-found","api-v2"],"backgroundTag":null,"analyzedSha":"176037d0afbe572f870a3c702985e7cd83fe6c0c","analyzedAt":"2026-08-12T19:12:41.464Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}