calcom/cal.diy · error · BadRequestException
Could not find calendar credentials for ${ctx.integrationSlu
Error message
Could not find calendar credentials for ${ctx.integrationSlug}. Please reconnect your calendar. What it means
Thrown by handleCalendarBasedIntegration when a calendar reference exists but credentialService.getCredentialForReference returns no matching credential among the user's credentials. The reference points at a credential ID that no longer exists, so the calendar event cannot be updated to attach the meeting link.
Source
Thrown at apps/api/v2/src/platform/bookings/2024-08-13/services/booking-location-integration.service.ts:265
requiredCalendarType: string
): Promise<BookingLocationResponse> {
const calendarReference = ctx.booking.references.find(
(ref) => ref.type.includes(requiredCalendarType) && !ref.deleted
);
if (!calendarReference) {
throw new BadRequestException(
`No ${requiredCalendarType.replace("_", " ")} event found for this booking. ${ctx.integrationSlug} requires a ${requiredCalendarType.replace("_", " ")} event to generate the meeting link.`
);
}
const calendarCredential = await this.credentialService.getCredentialForReference(
calendarReference,
ctx.booking.user?.credentials || []
);
if (!calendarCredential) {
throw new BadRequestException(
`Could not find calendar credentials for ${ctx.integrationSlug}. Please reconnect your calendar.`
);
}
const evt = await this.calendarSyncService.buildCalEventFromBookingData(
ctx.booking,
ctx.internalLocation,
null
);
if (ctx.integrationSlug === "google-meet") {
evt.conferenceData = {
createRequest: {
requestId: `${ctx.booking.uid}-meet`,
},
};
}
View on GitHub (pinned to 176037d0af)
Solutions
- Have the organizer reconnect the calendar integration in Settings to create a fresh credential.
- Re-sync/re-create the booking's calendar event so a new reference tied to the new credential is generated.
- If the credential belongs to a different user, ensure the booking host is the one who owns the connected calendar.
Defensive patterns
Strategy: validation
Validate before calling
// Before PATCHing, confirm the calendar reference has a resolvable credential.
const refs = await api.get(`/v2/bookings/${uid}/references`);
const calRef = refs.find((r) => r.type.includes('google_calendar') && !r.deleted);
if (calRef && !calRef.credentialId) throw new Error('Calendar reference has no credential; reconnect the calendar'); Type guard
function referenceHasCredential(ref: { credentialId?: number | null } | undefined): boolean {
return !!ref && ref.credentialId != null && ref.credentialId > 0;
} Try / catch
try {
await api.patch(`/v2/bookings/${uid}/location`, { location: { type: 'integration', integration: 'google-meet' } });
} catch (err) {
if (err.status === 400 && /calendar credentials/.test(err.message)) {
// host must reconnect the calendar and re-sync
}
throw err;
} Prevention
- Reconnect the calendar app after disconnecting to refresh the credential.
- Re-sync bookings so references point at current credentials.
- Ensure the booking host owns the connected calendar credential.
When it happens
Trigger: PATCH booking location to a calendar-based integration (google-meet, office365-video calendar path) where the booking has a non-deleted calendar reference, but the credential row it references has been deleted or does not belong to the booking host.
Common situations: User disconnected the calendar app after the booking was created (credential deleted but reference retained); credential revoked by the provider; user reconnected under a different account so the old credentialId is orphaned; cross-user credential mismatch.
Related errors
- No valid credentials available for Google Calendar
- Google Calendar is not connected for this user
- Google Calendar credentials are invalid. Please reconnect.
- Calendar credentials are invalid. Please reconnect.
- Video integration "${ctx.integrationSlug}" is not connected.
AI-assisted analysis of calcom/cal.diy@176037d0af (2026-08-12).
Data as JSON: /api/errors/6b6f63c0c149ac8c.
Report an issue: GitHub.