calcom-api

Interact with the Cal.diy API v2 to manage scheduling, bookings, event types, availability, and calendars. Use this skill when building integrations that need to create or manage bookings, check availability, configure event types, or sync calendars with Cal.diy's scheduling infrastructure.

Install
npx skills add 'https://github.com/calcom/cal.diy/tree/main/agents/skills/calcom-api'
Download bundle ↓
main · 6bc4529Scanned 2026-09-17

Contributors

GitHub-linked commit authors for this SKILL.md at the saved revision. Co-authors and history before file renames are not included.

File history ↗
View on GitHub
← Back to SKILL.md

Event Types API Reference

Detailed documentation for event type endpoints in the Cal.diy API v2.

Endpoints Overview

MethodEndpointDescription
GET/v2/event-typesList event types
POST/v2/event-typesCreate an event type
GET/v2/event-types/{eventTypeId}Get an event type
PATCH/v2/event-types/{eventTypeId}Update an event type
DELETE/v2/event-types/{eventTypeId}Delete an event type

List Event Types

GET /v2/event-types

Query Parameters

ParameterTypeRequiredDescription
takenumberNoNumber of results (default: 10, max: 250)
skipnumberNoPagination offset

Response

{
  "status": "success",
  "data": [
    {
      "id": 123,
      "title": "30 Minute Meeting",
      "slug": "30min",
      "description": "A quick 30 minute call",
      "lengthInMinutes": 30,
      "locations": [
        {
          "type": "integration",
          "integration": "cal-video"
        }
      ],
      "bookingFields": [],
      "disableGuests": false,
      "slotInterval": null,
      "minimumBookingNotice": 120,
      "beforeEventBuffer": 0,
      "afterEventBuffer": 0,
      "schedulingType": null,
      "metadata": {},
      "requiresConfirmation": false,
      "price": 0,
      "currency": "usd",
      "hidden": false
    }
  ]
}

Create an Event Type

POST /v2/event-types

Request Body

{
  "title": "30 Minute Meeting",
  "slug": "30min",
  "description": "A quick 30 minute call to discuss your needs",
  "lengthInMinutes": 30,
  "locations": [
    {
      "type": "integration",
      "integration": "cal-video"
    }
  ],
  "bookingFields": [
    {
      "type": "textarea",
      "name": "notes",
      "label": "Additional Notes",
      "required": false,
      "placeholder": "Any additional information..."
    }
  ],
  "disableGuests": false,
  "slotInterval": 15,
  "minimumBookingNotice": 120,
  "beforeEventBuffer": 5,
  "afterEventBuffer": 5,
  "scheduleId": 1,
  "requiresConfirmation": false,
  "hidden": false
}

Required Fields

FieldTypeDescription
titlestringDisplay name of the event type
slugstringURL-friendly identifier
lengthInMinutesnumberDuration of the event

Optional Fields

FieldTypeDescription
descriptionstringDescription shown on booking page
locationsarrayMeeting location options
bookingFieldsarrayCustom form fields
disableGuestsbooleanPrevent attendees from adding guests
slotIntervalnumberMinutes between available slots
minimumBookingNoticenumberMinimum minutes before booking
beforeEventBuffernumberBuffer time before event (minutes)
afterEventBuffernumberBuffer time after event (minutes)
scheduleIdnumberID of schedule to use
requiresConfirmationbooleanRequire host confirmation
hiddenbooleanHide from public profile

Location Types

Cal Video (Built-in)

{
  "type": "integration",
  "integration": "cal-video"
}

Zoom

{
  "type": "integration",
  "integration": "zoom"
}

Google Meet

{
  "type": "integration",
  "integration": "google-meet"
}

Microsoft Teams

{
  "type": "integration",
  "integration": "msteams"
}

In-Person

{
  "type": "address",
  "address": "123 Main St, City, Country"
}

Phone Call (Host Calls)

{
  "type": "userPhone"
}

Phone Call (Attendee Provides)

{
  "type": "attendeePhone"
}
{
  "type": "link",
  "link": "https://custom-meeting.com/room"
}

Booking Fields

Custom form fields for collecting information from attendees.

Text Field

{
  "type": "text",
  "name": "company",
  "label": "Company Name",
  "required": true,
  "placeholder": "Enter your company name"
}

Textarea

{
  "type": "textarea",
  "name": "notes",
  "label": "Additional Notes",
  "required": false
}

Select (Dropdown)

{
  "type": "select",
  "name": "topic",
  "label": "Meeting Topic",
  "required": true,
  "options": [
    { "value": "sales", "label": "Sales Inquiry" },
    { "value": "support", "label": "Support" },
    { "value": "other", "label": "Other" }
  ]
}

Radio Buttons

{
  "type": "radio",
  "name": "preference",
  "label": "Preferred Contact Method",
  "required": true,
  "options": [
    { "value": "email", "label": "Email" },
    { "value": "phone", "label": "Phone" }
  ]
}

Checkbox

{
  "type": "checkbox",
  "name": "terms",
  "label": "I agree to the terms",
  "required": true
}

Phone Number

{
  "type": "phone",
  "name": "phone",
  "label": "Phone Number",
  "required": false
}

Get an Event Type

GET /v2/event-types/{eventTypeId}

Path Parameters

ParameterTypeDescription
eventTypeIdnumberEvent type ID

Update an Event Type

PATCH /v2/event-types/{eventTypeId}

Request Body

Only include fields you want to update:

{
  "title": "Updated Meeting Title",
  "lengthInMinutes": 45,
  "hidden": false
}

Delete an Event Type

DELETE /v2/event-types/{eventTypeId}

Team Event Types

For team event types, use the team-scoped endpoints:

List Team Event Types

GET /v2/teams/{teamId}/event-types

Create Team Event Type

POST /v2/teams/{teamId}/event-types

Additional fields for team event types:

{
  "title": "Team Meeting",
  "slug": "team-meeting",
  "lengthInMinutes": 30,
  "schedulingType": "ROUND_ROBIN",
  "hosts": [
    { "userId": 1, "isFixed": false },
    { "userId": 2, "isFixed": false }
  ]
}

Scheduling Types

TypeDescription
ROUND_ROBINDistributes bookings among team members
COLLECTIVEAll team members must attend
MANAGEDParent event type that creates child event types

Create private booking links that bypass public visibility:

GET /v2/event-types/{eventTypeId}/private-links
POST /v2/event-types/{eventTypeId}/private-links

Organization Event Types

For organization-level event type management:

List Organization Teams

GET /v2/organizations/{orgId}/teams

Response

{
  "status": "success",
  "data": [
    {
      "id": 1,
      "name": "Sales Team",
      "slug": "sales",
      "parentId": null,
      "isOrganization": false
    }
  ]
}

Get Team Event Types (Organization Scope)

GET /v2/organizations/{orgId}/teams/{teamId}/event-types

Create Team Event Type (Organization Scope)

POST /v2/organizations/{orgId}/teams/{teamId}/event-types

Team event types support different scheduling modes:

ModeDescription
COLLECTIVEAll team members must attend the meeting
ROUND_ROBINDistributes bookings among team members based on availability and priority
MANAGEDParent event type that creates child event types for team members

Event Type Webhooks

Configure webhooks specific to an event type:

List Event Type Webhooks

GET /v2/event-types/{eventTypeId}/webhooks

Create Event Type Webhook

POST /v2/event-types/{eventTypeId}/webhooks
{
  "subscriberUrl": "https://your-app.com/webhook",
  "triggers": ["BOOKING_CREATED"],
  "active": true
}
Referenced from SKILL.md