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

# Get a calendar connect link

> The link and its outcome, for when you'd rather not read it from `return_url` or the webhook.



## OpenAPI

````yaml /openapi.yaml get /calendar_connect_links/{id}
openapi: 3.1.0
info:
  title: MeetingKit API
  description: >
    The MeetingKit API lets you build a meetings feature into your product:
    users connect

    a calendar, a notetaker joins their calls, and you get the transcript,
    speakers and

    summary of each meeting.
  version: '2026-10-12'
  contact:
    name: MeetingKit Developer Support
    email: dev@happyscribe.co
servers:
  - url: https://api.meetingkit.com/api/v1
security:
  - apiKeyAuth: []
tags:
  - name: Agent sessions
    description: Exchange the code a user hands their AI agent for API credentials.
  - name: Uploads
    description: Get signed URLs to upload media files directly to MeetingKit storage.
  - name: Transcribe
    description: Create transcription orders from media URLs.
  - name: Subtitle
    description: Create subtitling orders from media URLs.
  - name: Translate
    description: Create translation orders from existing conversations.
  - name: Orders
    description: Retrieve and confirm the orders created by the service endpoints.
  - name: Conversations
    description: List, retrieve, update, and delete conversations.
  - name: Exports
    description: Export conversations to text, subtitle, video-editing, and data formats.
  - name: Bots
    description: Send a notetaker bot to Zoom, Google Meet, or Microsoft Teams calls.
  - name: Glossaries
    description: List glossaries to apply custom terminology to orders.
  - name: Style guides
    description: List style guides to apply formatting preferences to orders.
  - name: Workspaces
    description: List the workspaces the authenticated user belongs to.
  - name: Organization memberships
    description: Manage which users belong to a workspace.
  - name: Members
    description: A partner's end users inside a workspace (MeetingKit).
  - name: Meetings
    description: >-
      Every meeting of a workspace, from calendars and bots, with its results
      (MeetingKit).
  - name: Calendar connections
    description: >-
      Members' Google and Microsoft calendars, connected through a hosted
      consent link and synced by MeetingKit.
  - name: Calendar events
    description: Calendar events a partner pushes from its own calendar sync (MeetingKit).
  - name: Settings
    description: >-
      What gets recorded and how, as values you assign to a workspace, a member,
      a meeting category or one meeting (MeetingKit).
  - name: Settings assignments
    description: Where settings apply (MeetingKit).
  - name: Files
    description: Images uploaded to a workspace, to use in a brand kit (MeetingKit).
  - name: Webhook endpoints
    description: Register the receivers of a workspace's webhooks, and test them.
  - name: Webhook events
    description: >-
      The webhooks sent to a workspace's endpoints, how each delivery went, and
      redelivery.
  - name: People
    description: >-
      Language Services. People found in your transcripts (Memory API, private
      beta).
  - name: Companies
    description: >-
      Language Services. Companies found in your transcripts (Memory API,
      private beta).
paths:
  /calendar_connect_links/{id}:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
    get:
      tags:
        - Calendar connections
      summary: Get a calendar connect link
      description: >-
        The link and its outcome, for when you'd rather not read it from
        `return_url` or the webhook.
      operationId: getCalendarConnectLink
      responses:
        '200':
          description: The link.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalendarConnectLink'
        '401':
          description: >-
            Missing or invalid API key, or the key is not an owner or admin of
            the workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
        '404':
          description: No such link the key can see.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors'
components:
  schemas:
    CalendarConnectLink:
      type: object
      properties:
        id:
          type: string
          description: Stable typed ID beginning with `ccl_`.
        object:
          type: string
          description: Always `calendar_connect_link`.
        workspace_id:
          type: string
          description: Workspace ID, beginning with `wks_`. Treat it as an opaque string.
          example: wks_01k6a2r9s8x7c2dvq3m5n6p4ab
        member_id:
          description: >
            The member connecting, or `null` to create the member from the
            connected account.
          type: string
          nullable: true
        provider:
          description: |
            The calendar to connect.

            - `google`: Google Calendar.
            - `microsoft`: Microsoft Outlook calendar.
          type: string
          enum:
            - google
            - microsoft
        return_url:
          description: >
            Where the browser returns after consent, with the outcome in the
            query string.
          type: string
        client_reference_id:
          description: |
            Your own reference, returned on the redirect.
          type: string
          nullable: true
        member_data:
          allOf:
            - $ref: '#/components/schemas/CalendarConnectLinkMemberData'
          nullable: true
          description: >-
            The member the consent creates, as you sent it (`metadata` is `{}`
            when you sent none), or `null`.
        url:
          type: string
          nullable: true
          description: >-
            The link to send the user to. `null` once it can no longer be
            opened.
        expires_at:
          description: |
            When the link stops working, 24 hours after it was created.
          type: string
          format: date-time
        status:
          description: >
            - `open`: waiting for the user, including after they declined
            consent.

            - `completed`: the user connected their calendar; see
            `calendar_connection_id`.

            - `failed`: it could not connect; `error` says why.

            - `expired`: 24 hours went by.
          type: string
          enum:
            - open
            - completed
            - failed
            - expired
        calendar_connection_id:
          description: |
            The connection it made, once `status` is `completed`.
          type: string
          nullable: true
        error:
          description: |
            Why the link failed, or `null`.
          type: object
          nullable: true
          properties:
            code:
              type: string
              description: >-
                `access_denied`, `link_expired`, `link_used`,
                `account_mismatch`, `calendar_already_connected`,
                `account_in_use`, `not_authorized`, `connect_failed`
            message:
              description: |
                What happened.
              type: string
        created_at:
          description: |
            When the link was created, in ISO 8601.
          type: string
          format: date-time
    Errors:
      type: object
      required:
        - errors
      description: >
        Every error the API returns, `401` and `429` included. See
        [Errors](/api-reference/errors).
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Error'
        retry_in_seconds:
          type: integer
          description: >-
            On `429`, how long to wait before retrying. Also sent as
            `Retry-After`.
      example:
        errors:
          - code: invalid
            field: recording.methods.bot.mode
            message: 'must be one of: audio_and_video, audio_only, inherit'
    CalendarConnectLinkMemberData:
      type: object
      description: >-
        The member to create when the user consents. Nothing is created until
        then.
      properties:
        name:
          type: string
          maxLength: 100
          description: >-
            The member's name, up to 100 characters and not a URL, as for `POST
            /members`. A person who already has a MeetingKit account keeps their
            own.
        email:
          type: string
          format: email
          maxLength: 255
          description: >
            Pre-fills Google's or Microsoft's account chooser. It is a hint,
            never a check: the

            member's email is the account the user approves.
        metadata:
          $ref: '#/components/schemas/Metadata'
          description: >-
            Set on the member when it is created, or merged into an existing
            member's.
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: >-
            A stable snake_case word, safe to branch on. See
            [Errors](/api-reference/errors) for the list.
        message:
          type: string
          description: A sentence for humans. It may change; do not parse it.
        field:
          type: string
          description: >-
            The dotted path to the request field at fault, such as
            `recording.methods.bot.mode`. Present only when one field is.
    Metadata:
      type: object
      description: >
        Your own key-value pairs, for your ids and context. MeetingKit stores
        them, returns them on

        the object and in every webhook that carries it, and never acts on them.
        Up to 50 keys of up

        to 40 characters (no square brackets), values up to 500 characters. See

        [metadata](/meetingkit/setup#a-workspace-per-customer).
      maxProperties: 50
      propertyNames:
        minLength: 1
        maxLength: 40
        pattern: ^[^\[\]]+$
      additionalProperties:
        type: string
        maxLength: 500
      example:
        gurusup_user_id: usr_8812
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Your API key, sent bare. See
        [Authentication](/api-reference/authentication).

````