{
  "generator": {
    "name": "Symvanta",
    "url": "https://symvanta.com"
  },
  "page": {
    "url": "https://symvanta.com/architecture/cal-com",
    "title": "Cal.com Architecture: How It Actually Works",
    "description": "Cal.com in 350 clusters: the web app's server request path leads on size, safeStringify carries the heaviest coupling, booking creation traced end to end by Symvanta.",
    "datePublished": "2026-07-02",
    "dateModified": "2026-08-22"
  },
  "repository": {
    "name": "calcom/cal.com",
    "url": "https://github.com/calcom/cal.com",
    "commit": "176037d",
    "license": "MIT"
  },
  "graph": {
    "modules": 350,
    "dependencyCycles": 25,
    "modularityQ": 0.96,
    "largestCycleFiles": 227,
    "mutuallyRecursiveGroups": 15
  },
  "summaryMarkdown": "Cal.com is an open-source scheduling platform built on Next.js, tRPC, and a NestJS public API (`apps/api/v2`): a monorepo covering the booking web app, a versioned REST API for platform integrations, the embeddable Booker other sites drop onto their own pages, and the app-store adapters that connect a user's calendars, video providers, and payment processors. Symvanta's Louvain community detection organized the indexed symbols into 350 functional clusters (modularity Q=0.96), which for a monorepo this size means almost every call stays inside the cluster it starts in. The largest cluster is the web app's server-side request path around `buildLegacyRequest` (837 symbols): the bridge that rebuilds a legacy request out of App Router headers and cookies, the session resolver behind it, and the repositories a page loads through. Behind it sit the tRPC server layer around `TrpcSessionUser` (783 symbols) and the app-store integration layer around `getAppKeysFromSlug` (744 symbols), then the design system (`classNames`, 724 symbols), the webhook pipeline (`BaseEventDTO`, 643 symbols), and the booking audit trail (557 symbols). Louvain labels a cluster after the directory its members share whenever no symbol dominates it, and names a few after a fraction of what they hold, so two of the ten module names below were re-derived from the packages and symbols the cluster actually holds, checked one by one with `find_node` against the graph. Cal.com is released under the MIT License, with no separate commercial directory in the current codebase.",
  "subsystems": [
    {
      "name": "The web app's server request path",
      "descriptionMarkdown": "`buildLegacyRequest`, 837 symbols, is the largest cluster on the map and the only one of the ten that spans several packages, which is why Louvain named it after its hub. It covers what happens before an `apps/web` page renders: [`buildLegacyRequest`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/web/lib/buildLegacyCtx.ts#L47) and `buildLegacyCtx` reconstruct a legacy request and context from App Router headers, cookies, params, and search params; [`getServerSession`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/auth/lib/getServerSession.ts#L39) resolves who the request runs as; [`UserRepository`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/users/repositories/UserRepository.ts#L124) and [`FeaturesRepository`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/flags/features.repository.ts#L20) are the two repositories most pages load through; [`getTranslate`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/web/app/_utils.tsx#L15) loads the request's translations; and [`HttpError`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/lib/http-error.ts#L1) with [`getServerErrorFromUnknown`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/lib/server/getServerErrorFromUnknown.ts#L53) shape what a failed server call returns. Its heaviest outgoing edge is 14 calls into `safeStringify`, and it calls the app-store layer 8 times."
    },
    {
      "name": "The tRPC server layer",
      "descriptionMarkdown": "`TrpcSessionUser`, 783 symbols, is `packages/trpc/server`: the request context and the procedures built on it. `createContext` resolves the session user a request runs as, `authedProcedure` is the base every signed-in procedure extends, [`createNextApiHandler`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/trpc/server/createNextApiHandler.ts#L10) mounts the router onto Next.js, and [`onErrorHandler`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/trpc/server/onErrorHandler.ts#L16) normalizes what a failed procedure returns to the client. Most of the rest of the cluster is the Zod input schema that each router declares for each of its procedures. Its heaviest edge on the map points into the request path 4 times, the same request resolving its session and locale on the way out."
    },
    {
      "name": "The app-store integration layer",
      "descriptionMarkdown": "`getAppKeysFromSlug`, 744 symbols, is `packages/app-store`, where every calendar, video, CRM, and payment app is registered and configured. It holds per-app credential lookup ([`getAppKeysFromSlug`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/_utils/getAppKeysFromSlug.ts#L4), [`getParsedAppKeysFromSlug`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/_utils/getParsedAppKeysFromSlug.ts#L6)), the install path each app returns to ([`getInstalledAppPath`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/_utils/getInstalledAppPath.ts#L7)), and the OAuth callback state that survives the round trip to a provider ([`IntegrationOAuthCallbackState`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/types.d.ts#L8), [`encodeOAuthState`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/_utils/oauth/encodeOAuthState.ts#L6), [`decodeOAuthState`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/_utils/oauth/decodeOAuthState.ts#L8)). Its two heaviest edges tie at 11, one into the request path and one into `safeStringify`, and the named integrations under them are HubSpot 7, Salesforce 3, and Stripe 2."
    },
    {
      "name": "The shared UI surface",
      "descriptionMarkdown": "The design system in `packages/ui`, 724 symbols, holds the [`classNames`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/ui/classNames.ts#L3) merge function alongside [`Tooltip`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/ui/components/tooltip/Tooltip.tsx#L8), [`Avatar`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/ui/components/avatar/Avatar.tsx#L70), [`buttonClasses`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/ui/components/button/Button.tsx#L42), and the [`IconName`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/ui/components/icon/icon-names.ts#L3) union that types every icon in the product. It is the most self-contained module drawn: one outgoing edge of 4 calls, into the avatar helpers, and nothing on the map calls back into it. Most of what a component here calls is another component in the same cluster."
    },
    {
      "name": "Webhook delivery",
      "descriptionMarkdown": "`BaseEventDTO`, 643 symbols, is `packages/features/webhooks`: the pipeline that tells a customer's endpoint a booking changed. It holds the DTOs an event is serialized into ([`BaseEventDTO`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/webhooks/lib/dto/types.ts#L6), [`WebhookPayload`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/webhooks/lib/factory/types.ts#L76)), the queued task shape and its schema ([`WebhookTaskPayload`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/webhooks/lib/types/webhookTask.ts#L122), [`webhookTaskPayloadSchema`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/webhooks/lib/types/webhookTask.ts#L97)), and the subscriber lookup that decides who receives it ([`WebhookSubscriber`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/webhooks/lib/dto/types.ts#L416)). Its outgoing edges are all small, 2 into the request path and 1 into `safeStringify`, the shape of a subsystem that is handed a payload instead of going looking for data."
    },
    {
      "name": "The booking audit trail",
      "descriptionMarkdown": "`booking-audit`, 557 symbols, is `packages/features/booking-audit`, the record of who changed a booking and what changed. [`BookingAuditContextSchema`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/booking-audit/lib/dto/types.ts#L65) and [`BaseStoredAuditData`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/booking-audit/lib/actions/IAuditActionService.ts#L26) define what gets written, [`AuditActorType`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/booking-audit/lib/repository/IAuditActorRepository.ts#L1) records who wrote it, and `DataRequirements` drives the enrichment store that turns a stored row back into readable text through [`TranslationWithParams`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/booking-audit/lib/actions/IAuditActionService.ts#L15). Its one edge on the map is 5 calls into `safeStringify`. Louvain labeled this cluster \"Data Auditing Components\"; the name here comes from the feature package its members all live in."
    },
    {
      "name": "Log-safe serialization and the video adapters",
      "descriptionMarkdown": "`safeStringify`, 545 symbols, is the cluster the rest of the map leans on hardest: six of the other nine drawn modules have an edge into it. Alongside the serializer itself sit `getPiiFreeCredential`, which strips personal data out of a credential before it reaches a log line, [`getUid`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/lib/CalEventParser.ts#L215) from the calendar-event parser, [`findValidApiKey`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/_utils/findValidApiKey.ts#L9), and [`getVideoAdapters`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/getVideoAdapters.ts#L11), the lookup that turns a stored credential into a working video-provider client. It calls back into the request path 7 times and into the tRPC layer once."
    },
    {
      "name": "The bookings list",
      "descriptionMarkdown": "`BookingOutput`, 512 symbols, is the bookings screen in `apps/web`. The hub, [`BookingOutput`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/web/modules/bookings/types.ts#L17), is one booking as the `viewer.bookings.get` tRPC router returns it, [`BookingRowData`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/web/modules/bookings/types.ts#L28) wraps that booking in the row state the table needs, [`BookingListingStatus`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/web/components/booking/types.ts#L3) is the status filter the listing runs under, taken straight off the router's input type, and [`BookingActionContext`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/web/components/booking/actions/bookingActions.ts#L7) carries the booking plus the flags every row action reads (`isUpcoming`, `isCancelled`, `isPending`, `isTabRecurring`). The platform atoms call into it 4 times and it calls back twice, the heaviest traffic between any two UI clusters on the map."
    },
    {
      "name": "Notification delivery",
      "descriptionMarkdown": "`BaseEmail`, 499 symbols, is `packages/emails`: [`BaseEmail`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/emails/templates/_base-email.ts#L14) is the class every template extends, [`renderEmail`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/emails/src/renderEmail.ts#L3) turns a React template into the HTML that ships, and [`SMSManager`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/sms/sms-manager.ts#L23) covers the text-message half of the same job. Its heaviest edge, 13 calls, goes to a second and smaller emails cluster around [`BaseScheduledEmail`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/emails/src/templates/BaseScheduledEmail.tsx#L18) (165 symbols) that holds the layout primitives every template renders inside. Louvain named this cluster after the `templates` directory its members share; the name here is its hub. On the map it calls the request path twice and `safeStringify` twice."
    },
    {
      "name": "The platform atoms and the Booker",
      "descriptionMarkdown": "`useAtomsContext`, 425 symbols, is `packages/platform/atoms`, the React components Cal.com ships to platform customers, plus the Booker state they drive. [`useAtomsContext`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/platform/atoms/hooks/useAtomsContext.ts#L49) and [`useIsPlatform`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/platform/atoms/hooks/useIsPlatform.ts#L3) tell a component whether it is rendering inside a customer's embed or inside Cal.com's own web app, and [`useBookerStoreContext`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/bookings/Booker/BookerStoreProvider.tsx#L23) exposes the Booker's in-progress selections to both. Its heaviest edge is 4 calls into the bookings list, and it calls `safeStringify` twice."
    }
  ],
  "startReading": {
    "symbols": [
      {
        "name": "buildLegacyRequest",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/web/lib/buildLegacyCtx.ts#L47"
      },
      {
        "name": "TrpcSessionUser",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/trpc/server/types.ts#L3"
      },
      {
        "name": "getAppKeysFromSlug",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/app-store/_utils/getAppKeysFromSlug.ts#L4"
      },
      {
        "name": "classNames",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/ui/classNames.ts#L3"
      },
      {
        "name": "BaseEventDTO",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/webhooks/lib/dto/types.ts#L6"
      },
      {
        "name": "DataRequirements",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/booking-audit/lib/service/EnrichmentDataStore.ts#L33"
      },
      {
        "name": "safeStringify",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/lib/safeStringify.ts#L4"
      },
      {
        "name": "BookingOutput",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/web/modules/bookings/types.ts#L17"
      },
      {
        "name": "BaseEmail",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/emails/templates/_base-email.ts#L14"
      },
      {
        "name": "useAtomsContext",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/platform/atoms/hooks/useAtomsContext.ts#L49"
      },
      {
        "name": "renderEmail",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/emails/src/renderEmail.ts#L3"
      },
      {
        "name": "createNextApiHandler",
        "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/trpc/server/createNextApiHandler.ts#L10"
      }
    ],
    "endpoints": []
  },
  "requestFlow": [
    {
      "position": 1,
      "symbol": "BookingsController_2024_08_13.createBooking",
      "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/controllers/bookings.controller.ts#L149",
      "markdown": "`BookingsController_2024_08_13.createBooking` ([`apps/api/v2/src/platform/bookings/2024-08-13/controllers/bookings.controller.ts:149`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/controllers/bookings.controller.ts#L149)) is the entry point, guarded by `OptionalApiAuthGuard` since booking creation does not require the caller to be signed in. It hands the parsed body, the raw request, and the optional user straight to the service layer."
    },
    {
      "position": 2,
      "symbol": "BookingsService_2024_08_13.createBooking",
      "sourceUrl": "https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L112",
      "markdown": "`BookingsService_2024_08_13.createBooking` ([`services/bookings.service.ts:112`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L112)) runs the validation every booking has to pass regardless of type: [`getBookedEventType`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L188) resolves the event type from an id, a username and slug, or a team slug and slug; [`EventTypeAccessService.userIsEventTypeAdminOrOwner`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/modules/event-types/services/event-type-access.service.ts#L19) decides whether the caller counts as an owner or host; [`checkBookingRequiresAuthenticationSetting`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L169) enforces the event type's own authentication rule with that answer; a managed parent event type is rejected outright; collective and round-robin event types go through [`checkEventTypeHasHosts`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L160); and [`hasRequiredBookingFieldsResponses`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L217) confirms the submitted form answers cover every required field."
    },
    {
      "position": 3,
      "symbol": null,
      "sourceUrl": null,
      "markdown": "Two flags off the resolved event type, `recurringEvent` and `seatsPerTimeSlot`, then pick exactly one of four sibling methods: [`createRegularBooking`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L459) for a plain single booking, [`createSeatedBooking`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L499) for a shared-seat event, and [`createRecurringBooking`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L399) / [`createRecurringSeatedBooking`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/bookings.service.ts#L428) for their recurring counterparts."
    },
    {
      "position": 4,
      "symbol": null,
      "sourceUrl": null,
      "markdown": "All four branches translate the API request into the internal booking shape through `InputBookingsService_2024_08_13` ([`createBookingRequest`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/input.service.ts#L97) for the two single-booking branches, [`createRecurringBookingRequest`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/input.service.ts#L242) for the recurring pair), then hand that shape to the shared booking engine in `packages/features`: [`RegularBookingService.createBooking`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/bookings/lib/service/RegularBookingService.ts#L2653) for the single branches, [`RecurringBookingService.createBooking`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/packages/features/bookings/lib/service/RecurringBookingService.ts#L144) for the recurring ones. This is the same engine the web app books through, so the REST API adds a translation layer on top of it rather than a second implementation."
    },
    {
      "position": 5,
      "symbol": null,
      "sourceUrl": null,
      "markdown": "Each branch shapes its response through a matching `OutputBookingsService_2024_08_13` method, and the two non-recurring branches re-read the row they just wrote through `BookingsRepository_2024_08_13` first ([`getByUidWithAttendeesAndUserAndEvent`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/repositories/bookings.repository.ts#L149) for a regular booking) because the engine returns less than the API promises. If anything along the way throws, [`ErrorsBookingsService_2024_08_13.handleBookingError`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/errors.service.ts#L34), or [`handleEventTypeToBeBookedNotFound`](https://github.com/calcom/cal.com/blob/176037d0afbe572f870a3c702985e7cd83fe6c0c/apps/api/v2/src/platform/bookings/2024-08-13/services/errors.service.ts#L10) for the specific case of a missing event type, converts the failure into the API's standard error shape before it reaches the caller."
    }
  ],
  "diagrams": [
    {
      "url": "https://symvanta.com/architecture/cal-com/module-map.svg",
      "encodingFormat": "image/svg+xml"
    }
  ]
}
