Daily Video Integration
Purpose and Scope
Daily is the video meeting provider integration used when a self-hosted Cal.diy instance needs to create Daily-powered meeting rooms for bookings. This page explains the operator-facing setup from the repository documentation and connects that setup to the app-store package entrypoint that makes the Daily app available inside the monorepo. The important distinction for administrators is that the documented Daily setup is API-key based: you obtain an API key from the Daily dashboard and place it in the Cal.diy environment, rather than configuring a user-facing OAuth callback route as you would for some other conferencing providers.
Sources: apps/docs/content/apps/daily.mdx, packages/app-store/dailyvideo/index.ts
Because Cal.diy is self-hosted, the Daily key is part of your deployment configuration. Treat it as an infrastructure secret with the same care as database credentials, mail credentials, and payment provider secrets. The Daily documentation specifically names the environment variable expected by Cal.diy, so the setup task is intentionally small: sign in to Daily, copy the key from the developer area, and expose it to the application runtime as DAILY_API_KEY. If your Daily account includes the Scale Plan, the optional DAILY_SCALE_PLAN flag enables Scale Plan capabilities such as video recording in the Cal.diy runtime configuration.
Relevant Source Files
apps/docs/content/apps/daily.mdx— The first-party app documentation page for Daily. It defines the setup sequence, theDAILY_API_KEYenvironment variable, and the optionalDAILY_SCALE_PLANvariable.packages/app-store/dailyvideo/index.ts— The Daily app-store package entrypoint. It exports the app implementation namespace asliband exports the appmetadata, making the Daily video app discoverable through the app-store package surface.
Core Configuration Reference
| Name | Required | Purpose | Source-backed behavior |
|---|---|---|---|
DAILY_API_KEY | Yes, when enabling Daily video meetings | Authenticates Cal.diy against Daily's API | The Daily setup guide instructs operators to copy the API key from the Daily Developers tab and paste it into this field in .env. |
DAILY_SCALE_PLAN | Optional | Enables Scale Plan-specific Daily capabilities | The Daily setup guide says to set this variable to true if the Daily account has the Scale Plan and you want features like video recording. |
A minimal local or deployment environment fragment for Daily therefore looks like this:
DAILY_API_KEY=replace-with-your-daily-api-key
# Optional: only if your Daily account has the Scale Plan
DAILY_SCALE_PLAN=trueKeep this configuration in the environment file or secret manager consumed by the Cal.diy process that serves bookings. The documentation names .env, which is the usual local development convention, but deployed environments should use the equivalent secret injection mechanism for the platform running Cal.diy. Do not commit the real Daily API key to the repository, and rotate it in Daily if it has ever been exposed in logs, screenshots, issue reports, or version control history.
Sources: apps/docs/content/apps/daily.mdx
Setup Flow
Start in the Daily dashboard and sign in with the Daily account that should own the rooms created for Cal.diy bookings. From the dashboard, navigate to the Developers tab and copy the API key shown there. Then open the environment file for the Cal.diy deployment and set DAILY_API_KEY to that value. If the account is on the Daily Scale Plan, add DAILY_SCALE_PLAN=true; otherwise omit it or leave it disabled. Restart the Cal.diy process after changing environment variables so the application reads the updated configuration.
This flow is intentionally shorter than OAuth-based app setup because the Daily page does not require registering a redirect URL or copying a client ID and client secret pair. The operator problem is not user authorization; it is giving the self-hosted scheduler permission to call Daily's API from the server-side application. That makes the main failure modes configuration-oriented: a missing key, a key copied from the wrong Daily account, an environment file not loaded by the active process, or an optional Scale Plan flag enabled without the corresponding Daily account capability.
Sources: apps/docs/content/apps/daily.mdx
System-to-Code Mapping
| Concern | Repository surface | How it fits together |
|---|---|---|
| Reader-facing setup instructions | apps/docs/content/apps/daily.mdx | Documents the exact administrator workflow for obtaining the Daily API key and setting Daily-related environment variables. |
| App-store package boundary | packages/app-store/dailyvideo/index.ts | Re-exports ./lib as lib and re-exports metadata, which is the package-level surface used by the app-store integration model. |
| Optional Daily recording-related capability | apps/docs/content/apps/daily.mdx | The docs associate Scale Plan behavior with DAILY_SCALE_PLAN=true, including features like video recording. |
The package entrypoint is small but important because it tells maintainers where the Daily app's public package boundary begins. Consumers of the app-store package should not need to know the internal file layout to discover the Daily integration; they import or resolve the app through the entrypoint that exposes implementation code under lib and static app description through metadata. When debugging whether the app exists in the app-store layer, this entrypoint is the first file to confirm before moving into deeper implementation files.
Sources: packages/app-store/dailyvideo/index.ts
Implementation Details and Operational Notes
The Daily documentation describes configuration, not database migration or UI customization. After setting the key, validate the integration through the Cal.diy application path that creates or uses video meeting locations for bookings. A successful configuration should let the app create Daily meeting details when a booking flow selects Daily as the conferencing option. If the app still behaves as though Daily is unavailable, verify the running process has the updated environment, then confirm the app-store package is present in the workspace and that the deployment has been rebuilt or restarted after configuration changes.
For operators using separate local, staging, and production-like environments, use separate Daily API keys where possible. That separation makes it easier to revoke a compromised development key without affecting real bookings and reduces confusion when testing Scale Plan-only features. If DAILY_SCALE_PLAN is set only in one environment, document that difference for support and testing, because features such as video recording may appear to work in one deployment and be absent in another by design.
Sources: apps/docs/content/apps/daily.mdx, packages/app-store/dailyvideo/index.ts
Testing Signals and Next Steps
A practical smoke test has three parts. First, inspect the loaded environment for the Cal.diy process and confirm DAILY_API_KEY is present without printing its full value into shared logs. Second, create or edit an event type that uses Daily video meeting behavior, then run through a booking as an attendee. Third, confirm the resulting booking has usable Daily meeting information and, if applicable, verify Scale Plan-specific behavior only when DAILY_SCALE_PLAN=true and the Daily account supports it.
If configuration fails, keep the investigation narrow before changing unrelated app settings. Re-copy the key from the Daily Developers tab, check for whitespace around the value, restart the web process, and ensure the deployment is reading the same .env or secret store you edited. For broader integration context, continue with the apps overview, compare OAuth-style setup on the Zoom integration page, or review troubleshooting pages for environment and app configuration issues.