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

# Get a link that connects Cal.com

> Cal.com asks the account's owner to agree in a browser, so the API can't connect an account by itself: send the link this returns to whoever owns the Cal.com account. They sign in to LobbyStack as an owner or admin of the business, agree on Cal.com's page, and land on the dashboard's integrations page, where they can pick the event type to book; PATCH /calendars/{connection_id} can pick it too. Each appointment becomes a booking of that event type, made under a stand-in email address so Cal.com never emails the caller, and the account's bookings count as busy time. The link works until expires_at. Connecting another Cal.com account replaces the business's Cal.com connection, the one without a staff member. A deployment without Cal.com answers 403.



## OpenAPI

````yaml /api-reference/openapi.json post /calendars/calcom/connect
openapi: 3.1.0
info:
  title: LobbyStack API
  version: v1
  description: >-
    Read calls, contacts, appointments and messages, book appointments, and
    subscribe to webhooks. Authenticate with an API key in the Authorization
    header. A platform key also names the business it acts on in the
    LobbyStack-Business header. Each key allows 120 requests per minute by
    default.
servers:
  - url: https://app.lobbystack.com/api/v1
security:
  - bearerAuth: []
tags:
  - name: Business
  - name: Receptionist
  - name: Agents
  - name: Billing
  - name: Phone numbers
  - name: Onboarding
  - name: Team
  - name: Website chat
  - name: Calendars
  - name: Notifications
  - name: Calls
  - name: Contacts
  - name: Appointments
  - name: Messages
  - name: Knowledge
  - name: Webhooks
  - name: Platform
  - name: Partner
paths:
  /calendars/calcom/connect:
    post:
      tags:
        - Calendars
      summary: Get a link that connects Cal.com
      description: >-
        Cal.com asks the account's owner to agree in a browser, so the API can't
        connect an account by itself: send the link this returns to whoever owns
        the Cal.com account. They sign in to LobbyStack as an owner or admin of
        the business, agree on Cal.com's page, and land on the dashboard's
        integrations page, where they can pick the event type to book; PATCH
        /calendars/{connection_id} can pick it too. Each appointment becomes a
        booking of that event type, made under a stand-in email address so
        Cal.com never emails the caller, and the account's bookings count as
        busy time. The link works until expires_at. Connecting another Cal.com
        account replaces the business's Cal.com connection, the one without a
        staff member. A deployment without Cal.com answers 403.
      operationId: createCalcomConnectLink
      parameters:
        - name: LobbyStack-Business
          in: header
          description: >-
            The business a platform key acts on. Required with a platform key. A
            per-business key may leave it out; if it sends one, it must be the
            key's own business.
          schema:
            type: string
            format: uuid
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                required:
                  - data
                properties:
                  data:
                    $ref: '#/components/schemas/CalendarConnectLink'
        '400':
          description: >-
            The request is invalid (invalid_request), or a platform key sent no
            LobbyStack-Business header (business_required).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: The API key is missing, invalid, or revoked (unauthorized).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            Refused. insufficient_scope: the key lacks the business:write scope.
            forbidden: a per-business key named another business in
            LobbyStack-Business. key_owner_inactive: the person the key acts for
            can't any more: a per-business key's creator is no longer an owner
            or admin, or a platform key's owner_email has no verified LobbyStack
            account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: A platform key named a business it cannot act on (not_found).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: The request conflicts with the current state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: >-
            Too many requests (rate_limited). Wait for the Retry-After header's
            number of seconds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds to wait.
      security:
        - bearerAuth: []
components:
  schemas:
    CalendarConnectLink:
      type: object
      properties:
        url:
          type: string
          description: >-
            The link to open in a browser. Whoever opens it signs in to
            LobbyStack as an owner or admin of the business, then agrees on
            Google's page.
        expires_at:
          type: string
          format: date-time
          description: The link works until then.
      required:
        - url
        - expires_at
      additionalProperties: false
      description: A link that connects a Google Calendar to the business.
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - invalid_request
                - unauthorized
                - forbidden
                - insufficient_scope
                - not_found
                - conflict
                - idempotency_key_reused
                - idempotency_request_in_progress
                - booking_disabled
                - booking_requires_confirmation
                - slot_unavailable
                - rate_limited
                - rate_limit_unavailable
                - method_not_allowed
                - internal_error
                - business_required
                - key_owner_inactive
                - plan_limit_reached
                - phone_numbers_unavailable
            message:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  path:
                    type: string
                  message:
                    type: string
                required:
                  - path
                  - message
                additionalProperties: false
          required:
            - code
            - message
          additionalProperties: false
      required:
        - error
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        An API key from Settings > API keys (lsk_...), which acts on its own
        business, or a platform key from the PLATFORM_API_KEYS setting
        (lsp_...), which onboards and manages businesses. Scopes: business:read,
        business:write, calls:read, contacts:read, contacts:write,
        appointments:read, appointments:write, messages:read, knowledge:read,
        knowledge:write, webhooks:manage, billing:manage, phone_numbers:manage,
        team:manage, businesses:create, users:create, phone_numbers:purchase,
        partner:read, partner.businesses:write, partner.demos:write,
        partner.packages:write, partner.branding:write, partner.templates:write,
        partner.team:write, partner.billing:read, partner.billing:write. Only
        platform keys can hold businesses:create and users:create, and only a
        key a partner made in its console can hold the partner scopes, which the
        Partner endpoints use. Only a partner's owners grant
        partner.billing:read and partner.billing:write.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.