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

# Cal.com

> Connect Cal.com with its API key and assign it to a voice agent scheduling tool.

export const Availability = ({lang = 'es', plan, addon, permission, route, status}) => {
  const L = lang === 'en' ? {
    plan: 'Plan',
    addon: 'Add-on',
    permission: 'Permission',
    route: 'Where',
    status: 'Status',
    addonNote: 'enabled on request',
    allPlans: 'All plans',
    beta: 'Beta',
    nuevo: 'New',
    soon: 'Coming soon'
  } : {
    plan: 'Plan',
    addon: 'Add-on',
    permission: 'Permiso',
    route: 'Dónde',
    status: 'Estado',
    addonNote: 'se activa a pedido',
    allPlans: 'Todos los planes',
    beta: 'Beta',
    nuevo: 'Nuevo',
    soon: 'Próximamente'
  };
  const items = [];
  if (plan) items.push([L.plan, plan]);
  if (addon) items.push([L.addon, `${addon} · ${L.addonNote}`]);
  if (permission) items.push([L.permission, permission]);
  if (route) items.push([L.route, route]);
  if (status) items.push([L.status, L[status] || status]);
  return <div style={{
    display: 'flex',
    flexWrap: 'wrap',
    gap: '6px 22px',
    padding: '12px 16px',
    margin: '4px 0 24px',
    border: '1px solid rgba(2, 82, 255, 0.28)',
    borderLeft: '3px solid #0252ff',
    borderRadius: '8px',
    background: 'rgba(2, 82, 255, 0.05)',
    fontSize: '13.5px',
    lineHeight: '1.5'
  }}>
      {items.map(([k, v]) => <div key={k} style={{
    display: 'flex',
    gap: '6px',
    alignItems: 'baseline'
  }}>
          <span style={{
    fontSize: '10.5px',
    fontWeight: 600,
    letterSpacing: '0.07em',
    textTransform: 'uppercase',
    opacity: 0.65
  }}>{k}</span>
          <span style={{
    fontWeight: 500
  }}>{v}</span>
        </div>)}
    </div>;
};

<Availability lang="en" route="Integrations → Cal.com" permission="integrations.read; integrations.create" />

The Cal.com integration makes its scheduling available through agent tools. You need an account with the event types and availability you want to offer.

## Configure

1. Open **Integrations → Cal.com**.
2. Enter the Cal.com API key. The form expects a `cal_` prefix.
3. Save the connection and check its status.
4. Add a Cal.com tool to the voice agent and select its connection and event configuration.
5. Explain when to check availability and when to book in the instructions.
6. Test with controlled data and verify the resulting event.

Cal.com and ContactShip keys are different credentials. Do not interchange them or place them in prompts.

## Missing availability

Review the event type, availability and time zone. Check that the connection belongs to the intended account. Valid credentials do not guarantee an available slot matching the request.

## Scope

Connecting Cal.com does not configure Google Calendar or ContactShip Agenda. Choose the tool for the system where you want bookings created.

## Frequently asked questions

<AccordionGroup>
  <Accordion title="Which key belongs here?">
    Use the Cal.com API key in the format shown by the form. A ContactShip API key does not authenticate that account.
  </Accordion>

  <Accordion title="Does connecting create the agent tool?">
    No. Add and configure the tool on the agent that will book appointments.
  </Accordion>

  <Accordion title="What should I check if the agent does not book?">
    Check the connection, event, availability and instructions. Review the tool result before repeating a booking.
  </Accordion>
</AccordionGroup>

## See also

* [Voice tools](/en/voice-agents/tools)
* [Google Calendar](/en/integrations/google-calendar)
