Skip to main content
ElevenLabs Documentation Docs

Search documentation

Type to search this documentation.

On this pageOverview

Cal.com

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).

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.

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.

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

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.

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

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.

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.

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.

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

Cal
'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

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:

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.

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.

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'.

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