Cal.com
Connect your ElevenLabs agents with Cal.com scheduling.
Overview
Section titled “Overview”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.
Capabilities
Section titled “Capabilities”| 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).
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.
Use a live key
Cal.com generates two types of keys — test keys (starting with
cal_) and live keys (starting withcal_live_). Use a live key so your agent can access real calendar data.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
How it works
Section titled “How it works”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.
Initial inquiry and meeting details
The agent asks for the meeting purpose, preferred date/time, and duration to gather scheduling information.
Check calendar availability
The agent checks calendar availability by:
- Using the
get_available_slotstool 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.
- Using the
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.
Meeting creation
The agent:
- Calls the
book_meetingtool after verifying all information. - Follows the booking template structure.
- Confirms meeting creation with the attendee.
- Informs them that they will receive a calendar invitation.
- Calls the
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.Manual webhook setup
Section titled “Manual webhook setup”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.

Add tools to the agent
Enable calendar bookings by creating two tools:
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.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:
Field Value Name get_available_slots Description This tool checks if a particular time slot is available in the calendar. Method GET URL https://api.cal.com/v2/slots Matches the request headers defined here:
Type Name Value Secret Authorization Select the secret key created above String cal-api-version 2024-09-04 Matches the request query parameters defined here:
Data Type Identifier Required Description string start Yes Start date/time (UTC) from which to fetch slots, e.g. '2024-08-13T09:00:00Z'. string end Yes End date/time (UTC) until which to fetch slots, e.g. '2024-08-13T17:00:00Z'. string eventTypeId Yes The 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:
Field Value Name book_meeting Description This tool books a meeting in the calendar once a time is agreed. Method POST URL https://api.cal.com/v2/bookings Matches the request headers defined here:
Type Name Value Secret Authorization Select the secret key created above String cal-api-version 2024-08-13 Matches the request body parameters defined here:
Identifier Data Type Required Description start String Yes The start time of the booking in ISO 8601 format in UTC timezone, e.g. '2024-08-13T09:00:00Z'. eventTypeId Number Yes The ID of the event type that is booked. If 15 minutes, return abc. If 30 minutes, return def. If 60 minutes, return xyz. attendee Object Yes The attendee's details. You must collect these fields from the user. The
eventTypeIdmust 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:
Identifier Data Type Required Description name String Yes The full name of the person booking the meeting. email String Yes The email address of the person booking the meeting. timeZone String Yes The 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.
Add date and time awareness
By default, the agent does not know the current date or time. Use one of the following approaches:
- Create a time retrieval tool: Add a tool that fetches the current date and time.
- Overrides: Use the overrides feature to inject the current date and time into the system prompt at the start of each conversation.
Security considerations
Section titled “Security considerations”- 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.