Skip to main content
ElevenLabs Documentation Docs
current

Search documentation

Type to search this documentation.

On this pageOverview

Cal.com

Connect your ElevenLabs agents with Cal.com scheduling.

Connect your ElevenLabs AI agents with Cal.com to manage scheduling and calendar bookings. This integration enables your agents to check availability, book appointments, cancel or reschedule meetings, and look up existing bookings through natural conversation.

Capability Support
Zero retention mode (ZRM) Not supported
Attachments in tools Not supported — tools operate on text only

This integration uses a Cal.com API key for authentication (not an OAuth app).

  1. Generate an API key in Cal.com

    Go to Settings > Developer > API Keys in your Cal.com account and click New. Copy the generated key immediately — it will not be shown again.

  2. Use a live key

    Cal.com generates two types of keys — test keys (starting with cal_) and live keys (starting with cal_live_). Use a live key so your agent can access real calendar data.

  3. Connect in ElevenLabs

    In the ElevenLabs integration setup, paste your Cal.com API key in the API Key field.

https://www.youtube.com/embed/dqPJeec029I

Cal.com Integration Demo

The agent schedules meetings by using tool calls to step through the booking process. The tabs below show a high-level summary and the detailed system prompt.

  1. Initial inquiry and meeting details

    The agent asks for the meeting purpose, preferred date/time, and duration to gather scheduling information.

  2. Check calendar availability

    The agent checks calendar availability by:

    • Using the get_available_slots tool to fetch open time slots.
    • Verifying whether the requested time is available.
    • Suggesting alternatives if the requested time is unavailable.
    • Confirming the selected time with the caller.
  3. Contact information collection

    Once a time is agreed upon, the agent:

    • Collects and validates the attendee’s full name.
    • Verifies email address accuracy.
    • Confirms time zone information.
    • Gathers any additional required fields for the Cal.com event type.
  4. Meeting creation

    The agent:

    • Calls the book_meeting tool after verifying all information.
    • Follows the booking template structure.
    • Confirms meeting creation with the attendee.
    • Informs them that they will receive a calendar invitation.
You are a helpful receptionist responsible for scheduling meetings using the Cal.com integration. Be friendly, precise, and concise.

Begin by briefly asking for the purpose of the meeting and the caller's preferred date and time.
Then, ask about the desired meeting duration (15, 30, or 60 minutes), and wait for the user's response before proceeding.

Once you have the meeting details, say you will check calendar availability:
- Call get_available_slots with the appropriate date range
- Verify if the requested time slot is available
- If not available, suggest alternative times from the available slots
- Continue until a suitable time is agreed upon

After confirming a time slot, gather the following contact details:
- The attendee's full name
- A valid email address. Note that the email address is transcribed from voice, so ensure it is formatted correctly.
- The attendee's time zone (in 'Continent/City' format like 'America/New_York')
- Read the email back to the caller to confirm accuracy

Once all details are confirmed, explain that you will create the meeting.
Create the meeting by using the book_meeting tool with the following parameters:
- start: The agreed meeting time in ISO 8601 format
- eventTypeId: The appropriate ID based on the meeting duration (15min: 1351800, 30min: 1351801, 60min: 1351802)
- attendee: An object containing the name, email, and timeZone

Thank the attendee and inform them they will receive a calendar invitation shortly.

Clarifications:
- Do not inform the user that you are formatting the email; simply do it.
- If the caller asks you to proceed with booking, do so with the existing information.

Guardrails:
- Do not share any internal IDs or API details with the caller.
- If booking fails, check for formatting issues in the email or time conflicts.
  1. Store your Cal.com secret

    Store your API key securely before making authenticated requests. Generate a new Cal.com API key if you have not already.

    The Cal.com API expects the following authentication header:

    Cal request header structure

    'Authorization': 'Bearer YOUR_API_KEY'

    Store the key in the agent’s secret storage to keep it secure and accessible when making requests.

    Tool secrets
  2. Add tools to the agent

    Enable calendar bookings by creating two tools:

    1. get_available_slots: When a user asks “Is Louis free at 10:30 AM on Tuesday?”, the agent uses Cal.com’s “Get available slots” endpoint to check for open time slots.
    2. book_meeting: After identifying a suitable time, the agent books the meeting using Cal.com’s “Create a booking” endpoint.

    Navigate to the Tools section of the dashboard and select Add Tool. Choose Webhook as the tool type, then fill in the following sections:

    Tool 1: get_available_slots

    Metadata used by the agent to determine when the tool should be called:

    FieldValue
    Nameget_available_slots
    DescriptionThis tool checks if a particular time slot is available in the calendar.
    MethodGET
    URLhttps://api.cal.com/v2/slots

    Matches the request headers defined here:

    TypeNameValue
    SecretAuthorizationSelect the secret key created above
    Stringcal-api-version2024-09-04

    Matches the request query parameters defined here:

    Data TypeIdentifierRequiredDescription
    stringstartYesStart date/time (UTC) from which to fetch slots, e.g. '2024-08-13T09:00:00Z'.
    stringendYesEnd date/time (UTC) until which to fetch slots, e.g. '2024-08-13T17:00:00Z'.
    stringeventTypeIdYesThe ID of the event type that is booked. If 15 minutes, return abc. If 30 minutes, return def. If 60 minutes, return xyz.
    Tool 2: book_meeting

    Metadata used by the agent to determine when the tool should be called:

    FieldValue
    Namebook_meeting
    DescriptionThis tool books a meeting in the calendar once a time is agreed.
    MethodPOST
    URLhttps://api.cal.com/v2/bookings

    Matches the request headers defined here:

    TypeNameValue
    SecretAuthorizationSelect the secret key created above
    Stringcal-api-version2024-08-13

    Matches the request body parameters defined here:

    IdentifierData TypeRequiredDescription
    startStringYesThe start time of the booking in ISO 8601 format in UTC timezone, e.g. '2024-08-13T09:00:00Z'.
    eventTypeIdNumberYesThe ID of the event type that is booked. If 15 minutes, return abc. If 30 minutes, return def. If 60 minutes, return xyz.
    attendeeObjectYesThe attendee's details. You must collect these fields from the user.

    The eventTypeId must correspond to the event types you have available in Cal. Call this endpoint to get a list of your account event types (or create another tool that does this automatically).

    Attendee object:

    IdentifierData TypeRequiredDescription
    nameStringYesThe full name of the person booking the meeting.
    emailStringYesThe email address of the person booking the meeting.
    timeZoneStringYesThe caller's timezone. Should be in the format of 'Continent/City' like 'Europe/London' or 'America/New_York'.

    Test the agent by pressing the Test AI agent button. Adjust the system prompt as needed.

  3. Add date and time awareness

    By default, the agent does not know the current date or time. Use one of the following approaches:

    1. Create a time retrieval tool: Add a tool that fetches the current date and time.
    2. Overrides: Use the overrides feature to inject the current date and time into the system prompt at the start of each conversation.
  • Use HTTPS endpoints for all webhook calls.
  • Store sensitive values as secrets using the ElevenLabs Secrets Manager.
  • Validate that all authorization headers follow the required format (Bearer YOUR_API_KEY).
  • Never expose event type IDs or API details to callers.
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu