event-types
Detailed documentation for event type endpoints in the Cal.diy API v2.
$ npx -y skills add calcom/cal.com --agent claude-codeHow it fires
How this agent gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Detailed documentation for event type endpoints in the Cal.diy API v2.
Agent definition
event-types.mdEvent Types API Reference
Detailed documentation for event type endpoints in the Cal.diy API v2.
Endpoints Overview
| Method | Endpoint | Description | |--------|----------|-------------| | GET | /v2/event-types | List event types | | POST | /v2/event-types | Create 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
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | take | number | No | Number of results (default: 10, max: 250) | | skip | number | No | Pagination 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
| Field | Type | Description | |-------|------|-------------| | title | string | Display name of the event type | | slug | string | URL-friendly identifier | | lengthInMinutes | number | Duration of the event |
Optional Fields
| Field | Type | Description | |-------|------|-------------| | description | string | Description shown on booking page | | locations | array | Meeting location options | | bookingFields | array | Custom form fields | | disableGuests | boolean | Prevent attendees from adding guests | | slotInterval | number | Minutes between available slots | | minimumBookingNotice | number | Minimum minutes before booking | | beforeEventBuffer | number | Buffer time before event (minutes) | | afterEventBuffer | number | Buffer time after event (minutes) | | scheduleId | number | ID of schedule to use | | requiresConfirmation | boolean | Require host confirmation | | hidden | boolean | Hide 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"
}Custom Link
{
"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
| Parameter | Type | Description | |-----------|------|-------------| | eventTypeId | number | Event 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-typesCreate Team Event Type
POST /v2/teams/{teamId}/event-typesAdditional 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 }
]
}S
Read more
Event Types API Reference
Detailed documentation for event type endpoints in the Cal.diy API v2.
Endpoints Overview
| Method | Endpoint | Description | |--------|----------|-------------| | GET | /v2/event-types | List event types | | POST | /v2/event-types | Create 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
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | take | number | No | Number of results (default: 10, max: 250) | | skip | number | No | Pagination 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
| Field | Type | Description | |-------|------|-------------| | title | string | Display name of the event type | | slug | string | URL-friendly identifier | | lengthInMinutes | number | Duration of the event |
Optional Fields
| Field | Type | Description | |-------|------|-------------| | description | string | Description shown on booking page | | locations | array | Meeting location options | | bookingFields | array | Custom form fields | | disableGuests | boolean | Prevent attendees from adding guests | | slotInterval | number | Minutes between available slots | | minimumBookingNotice | number | Minimum minutes before booking | | beforeEventBuffer | number | Buffer time before event (minutes) | | afterEventBuffer | number | Buffer time after event (minutes) | | scheduleId | number | ID of schedule to use | | requiresConfirmation | boolean | Require host confirmation | | hidden | boolean | Hide 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"
}Custom Link
{
"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
| Parameter | Type | Description | |-----------|------|-------------| | eventTypeId | number | Event 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-typesCreate Team Event Type
POST /v2/teams/{teamId}/event-typesAdditional 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 }
]
}S
Repo: calcom/cal.com
Other agents on caldiy.
- knowledge-base
This file contains domain knowledge about the Cal.diy product and codebase. For coding guidelines and rules, see [`rules/`](rules/).
Open agent - api-no-breaking-changes
**Impact: CRITICAL**
Open agent - api-thin-controllers
**Impact: HIGH**
Open agent - architecture-circular-dependencies
**Impact: CRITICAL**
Open agent - architecture-feature-boundaries
**Impact: CRITICAL**
Open agent - architecture-features-modules
The `packages/features` package should contain only framework-agnostic code: - Repositories (data access layer) - Services (business logic) - Core utilities and helpers - Types and interfaces
Open agent

