> ## Documentation Index
> Fetch the complete documentation index at: https://docs.julian.11x.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Bookings

> Connect Julian to Microsoft Bookings so callers can book meetings with your team during live calls.

Julian contacts prospects, qualifies them over the phone, and books meetings with your representatives. When your team
schedules through Microsoft Bookings, Julian can read availability and book directly into it during a live call.

There are three ways to integrate, each with different tradeoffs around IT involvement, reliability, and call
experience. You can start with the lightest option and graduate to a deeper integration as you scale.

## Integration options

|                     | Option 1: Browser Automation                                                               | Option 2: Cal.com + Outlook                                      | Option 3: Microsoft Bookings API                                       |
| ------------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- | ---------------------------------------------------------------------- |
| **IT involvement**  | None. No permissions or access needed                                                      | Light. Admin consent for OAuth scopes in Azure AD                | Moderate. Register an 11x app in your Azure tenant + grant permissions |
| **Permissions**     | Public booking link only (no auth)                                                         | `User.Read`, `Calendars.ReadWrite`, `offline_access` (delegated) | `Bookings.Read.All`, `BookingsAppointment.ReadWrite.All` (application) |
| **Booking latency** | \~15 seconds average                                                                       | \< 1 second (direct API)                                         | \< 1 second (direct API)                                               |
| **Reliability**     | Suitable for early launch. Depends on Microsoft's public booking page remaining consistent | High. Stable OAuth-based API integration                         | Highest. Direct Microsoft Graph API, fully deterministic               |
| **Setup effort**    | Available immediately                                                                      | Minimal. Standard integration                                    | Moderate. Additional integration development                           |
| **Best for**        | Zero-IT bridge while consent is in progress                                                | Fastest reliable launch with minimal IT lift                     | Enterprise production scale with centralized control                   |

## Choosing an option

<CardGroup cols={3}>
  <Card title="Browser Automation" icon="globe">
    No IT involvement and available immediately. Best as a bridge while admin consent is still being approved.
  </Card>

  <Card title="Cal.com + Outlook" icon="bolt">
    Sub-second booking with production-grade reliability behind a lightweight admin consent. The fastest path to a
    reliable launch.
  </Card>

  <Card title="Microsoft Bookings API" icon="building-shield">
    The enterprise-grade production path: fully deterministic, centrally controlled by your IT team, with no third-party
    token custody.
  </Card>
</CardGroup>

For most teams, **Option 2 (Cal.com + Outlook)** is the quickest way to a reliable launch. It delivers sub-second
booking and requires only a narrowly scoped admin consent: it accesses the calendars of users who explicitly
authenticate, and 11x never stores Microsoft tokens directly.

If admin consent is still in progress when you are ready to start calling, **Option 1 (Browser Automation)** can serve
as a bridge. It needs no IT involvement and can run while consent is under review. The \~15 second booking window is
handled inside the natural call flow. Because it depends on Microsoft's public booking page staying consistent, it is
not recommended for long-term production use.

For production at enterprise scale, **Option 3 (Microsoft Bookings API)** provides the deepest reliability, fully
deterministic behavior, and centralized IT control. It requires registering an 11x application in your Azure tenant and
granting Bookings API permissions, and keeps all credentials inside your tenant.

## Permission details by option

### Option 1: Browser Automation

No permissions, credentials, or IT involvement required. Julian navigates the public Microsoft Bookings page on behalf
of the prospect, the same page any external visitor would use. There is no access to internal systems, calendars, or
org data.

### Option 2: Cal.com + Outlook (delegated permissions)

These are **delegated permissions**: they act on behalf of the individual user who authenticates and do not grant
access to other users' data. Admin consent is required if your tenant has disabled user self-consent.

| Scope                 | Type      | What it does                                                                                  |
| --------------------- | --------- | --------------------------------------------------------------------------------------------- |
| `User.Read`           | Delegated | Reads the basic profile (name, email) of the user who authenticates. Used to identify the rep |
| `Calendars.ReadWrite` | Delegated | Reads and writes events on the authenticated user's calendar only. No access to other users   |
| `offline_access`      | Delegated | Maintains access via refresh tokens so the user does not re-authenticate on every booking     |

<Note>
  **Token custody:** Cal.com (hosted SaaS) brokers the Outlook OAuth connection and stores and manages the Microsoft
  OAuth tokens for the authenticating rep. 11x does not store or have direct access to Microsoft credentials.
</Note>

### Option 3: Microsoft Bookings API (application permissions)

These are **application permissions**: they allow the registered 11x app to act without a signed-in user. They require
registering an 11x application in your Azure tenant and granting admin consent. They are scoped to the minimum required
for reading availability and creating appointments.

| Scope                               | Type        | What it does                                                                        |
| ----------------------------------- | ----------- | ----------------------------------------------------------------------------------- |
| `Bookings.Read.All`                 | Application | Reads booking businesses, services, and staff availability to fetch open time slots |
| `BookingsAppointment.ReadWrite.All` | Application | Creates and reads appointments and customer records to book meetings for prospects  |

<Note>
  **Not requested:** `Bookings.Manage.All`. Julian does not create, modify, or delete businesses, staff members,
  services, or custom questions. Only read access to those resources and write access to appointments is required.
</Note>

<Note>
  **Token custody:** 11x stores the application credentials for the registered Azure app. Access can be revoked at any
  time by removing the app registration or revoking admin consent in your Azure tenant.
</Note>

## Security notes (Options 2 and 3)

* OAuth flow and Microsoft Graph API calls for Option 2 are handled by Cal.com's backend. 11x does not store Microsoft
  OAuth tokens.
* Access is scoped to the individual user who authenticates. There is no access to other users' calendars, mailboxes,
  or org data.
* Admin consent can be granted tenant-wide (for all users) or per-user. To limit which users the app applies to, use
  group-based app assignment (require user assignment, then assign the relevant group) as a separate access control.
* If your org has disabled user self-consent (a common enterprise policy), an Azure AD admin must grant consent.

## What happens during a call

When a caller reaches a point where a meeting should be booked, Julian uses Microsoft Bookings in real time:

1. Julian reads live availability for the relevant booking business and service.
2. Julian offers open time slots to the caller.
3. Julian books the caller into the selected slot and creates the appointment.

In short:

```text theme={null}
availability -> offer slot -> booking
```

## Reference documentation for IT review

**Option 2: Cal.com + Outlook (delegated permissions via Microsoft Graph)**

* Cal.com open source repository: [github.com/calcom/cal.com](https://github.com/calcom/cal.com)
* Cal.com Enterprise (SOC 2 Type II, encryption, compliance): [cal.com/enterprise](https://cal.com/enterprise)
* Microsoft Graph permissions reference: [learn.microsoft.com](https://learn.microsoft.com/en-us/graph/permissions-reference)
* Microsoft identity platform scopes and permissions: [learn.microsoft.com](https://learn.microsoft.com/en-us/entra/identity-platform/scopes-oidc)

Delegated scopes used: `User.Read`, `Calendars.ReadWrite`, `offline_access`. 11x uses Cal.com as a hosted SaaS and does
not self-host it; Microsoft OAuth tokens are stored and managed by Cal.com's infrastructure, not by 11x.

**Option 3: Microsoft Bookings API (application permissions)**

* Microsoft Bookings API overview: [learn.microsoft.com](https://learn.microsoft.com/en-us/graph/api/resources/booking-api-overview)
* Bookings appointment API (create/list): [learn.microsoft.com](https://learn.microsoft.com/en-us/graph/api/bookingbusiness-post-appointments)
* Bookings application permissions announcement: [devblogs.microsoft.com](https://devblogs.microsoft.com/microsoft365dev/application-permissions-for-bookings-apis/)

Application permissions required: `Bookings.Read.All`, `BookingsAppointment.ReadWrite.All`.

**Azure AD / Entra ID admin consent (Options 2 and 3)**

* Grant tenant-wide admin consent: [learn.microsoft.com](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/grant-admin-consent)
* User and admin consent overview: [learn.microsoft.com](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/user-admin-consent-overview)
* Configure the admin consent workflow: [learn.microsoft.com](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/configure-admin-consent-workflow)
* Configure user consent settings: [learn.microsoft.com](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/configure-user-consent)
