calcom/cal.diy · warning · BadRequestException
Invalid app, available apps are:
Error message
Invalid app, available apps are:
What it means
Thrown by ConferencingService.checkAppIsValidAndConnected when appSlug is not in the CONFERENCING_APPS array. This is the pre-flight validation used by disconnectConferencingApp and setDefaultConferencingApp. Returns HTTP 400. Like error 94 the message string ends mid-sentence and the full list is in the error-cause argument.
Source
Thrown at apps/api/v2/src/modules/conferencing/services/conferencing.service.ts:92
teamId
);
default:
throw new BadRequestException(
"Invalid conferencing app, available apps are: ",
[ZOOM, OFFICE_365_VIDEO].join(", ")
);
}
}
async getUserDefaultConferencingApp(userId: number) {
const user = await this.usersRepository.findById(userId);
return userMetadata.parse(user?.metadata)?.defaultConferencingApp;
}
async checkAppIsValidAndConnected(user: UserWithProfile, appSlug: string) {
if (!CONFERENCING_APPS.includes(appSlug)) {
throw new BadRequestException("Invalid app, available apps are: ", CONFERENCING_APPS.join(", "));
}
const credentials = await getUsersCredentialsIncludeServiceAccountKey(user);
const foundApp = getApps(credentials, true).filter((app) => app.slug === appSlug)[0];
const appLocation = foundApp?.appData?.location;
if (!foundApp || !appLocation) {
throw new BadRequestException(`${appSlug} not connected.`);
}
return foundApp.credential;
}
async disconnectConferencingApp(user: UserWithProfile, app: string) {
const credential = await this.checkAppIsValidAndConnected(user, app);
return handleDeleteCredential({
userId: user.id,
userMetadata: user?.metadata,View on GitHub (pinned to 176037d0af)
Solutions
- Source the slug from the documented CONFERENCING_APPS constant or the GET /v2/conferencing list response.
- Filter client-side dropdowns to only supported slugs.
- Read the error-cause argument to surface the actual accepted list to the user.
- Validate the slug against a known enum before issuing disconnect/default requests.
Example fix
// before
await api.disconnectConferencing(userInputSlug);
// after
import { CONFERENCING_APPS } from '@calcom/platform-constants';
if (!CONFERENCING_APPS.includes(userInputSlug)) {
throw new UserError(`Unsupported conferencing app. Supported: ${CONFERENCING_APPS.join(', ')}`);
}
await api.disconnectConferencing(userInputSlug); Defensive patterns
Strategy: type-guard
Validate before calling
import { CONFERENCING_APPS } from '@calcom/platform-constants';
function validateConferencingAppSlug(slug: string): void {
if (!CONFERENCING_APPS.includes(slug)) {
throw new Error(`${slug} is not a supported conferencing app. Valid: ${CONFERENCING_APPS.join(', ')}`);
}
}
validateConferencingAppSlug(req.params.app); Type guard
import { CONFERENCING_APPS } from '@calcom/platform-constants';
function isConferencingApp(slug: string): slug is typeof CONFERENCING_APPS[number] {
return CONFERENCING_APPS.includes(slug);
} Try / catch
try {
await conferencingService.disconnectConferencingApp(user, app);
} catch (e) {
if (e instanceof BadRequestException && /available apps are/.test(e.message)) {
return res.status(400).json({ code: 'invalid_app', supported: CONFERENCING_APPS });
}
throw e;
} Prevention
- Populate dropdowns from GET /v2/conferencing so only valid slugs are offered.
- Validate the slug client-side against CONFERENCING_APPS before issuing the request.
- Surface the error-cause argument (valid app list) to the user when rejecting.
When it happens
Trigger: Calling DELETE /v2/conferencing/{app}/disconnect or POST /v2/conferencing/{app}/default with an app slug not in CONFERENCING_APPS (e.g. 'webex', 'whereby', or a typo like 'daily').
Common situations: Client built before a slug rename; user typed a slug; integration lists third-party conferencing apps not supported by the platform API.
Related errors
- Invalid conferencing app. Available apps: GOOGLE_MEET.
- Invalid conferencing app, available apps are:
- ${appSlug} not connected.
- Could not set ${app} as default conferencing app
- Google Meet is already connected for this user.
AI-assisted analysis of calcom/cal.diy@176037d0af (2026-08-12).
Data as JSON: /api/errors/bc689b41ae742ee3.
Report an issue: GitHub.