Skip to main content
The Event Types API allows you to create, retrieve, update, and delete event types programmatically.

API Version

All event type endpoints require the cal-api-version header:
cal-api-version: 2024-06-14

Authentication

Most event type endpoints require authentication:
  • API Key: Pass via Authorization: Bearer <api-key> header
  • Access Token: OAuth access token
Required permissions:
  • EVENT_TYPE_READ for GET operations
  • EVENT_TYPE_WRITE for POST, PATCH, DELETE operations

Create an Event Type

Create a new event type for the authenticated user.
curl --request POST \
  --url https://api.cal.com/v2/event-types \
  --header 'Authorization: Bearer <api-key>' \
  --header 'cal-api-version: 2024-06-14' \
  --header 'Content-Type: application/json' \
  --data '{
    "title": "30 Minute Meeting",
    "slug": "30-min",
    "lengthInMinutes": 30,
    "locations": [
      {
        "type": "link",
        "link": "https://zoom.us/j/123456789"
      }
    ]
  }'

Request Body

title
string
required
Event type title (e.g., “30 Minute Meeting”)
slug
string
required
URL-friendly slug for the event type
lengthInMinutes
number
required
Duration of the event in minutes
description
string
Description of the event type
locations
array
Array of location objects
bookingFields
array
Custom fields to collect from attendees
hidden
boolean
Whether the event type is hidden from your public profile
requiresConfirmation
boolean
Whether bookings require manual confirmation
scheduleId
number
ID of the schedule to use for availability

Response

status
string
Status of the response (“success”)
data
object
Event type details

Get an Event Type

Retrieve a specific event type by ID.
curl --request GET \
  --url https://api.cal.com/v2/event-types/{eventTypeId} \
  --header 'Authorization: Bearer <api-key>' \
  --header 'cal-api-version: 2024-06-14'

Path Parameters

eventTypeId
number
required
The ID of the event type to retrieve

Access Control

Access is granted to:
  • System admins
  • Event type owner
  • Hosts or users assigned to the event type
  • Team admins/owners (for team event types)
  • Organization admins/owners

Get All Event Types

List event types. Hidden event types are only returned if authenticated as the owner.
curl --request GET \
  --url 'https://api.cal.com/v2/event-types?usernames=alice&sortCreatedAt=desc' \
  --header 'cal-api-version: 2024-06-14'

Query Parameters

usernames
string
Filter by username(s), comma-separated
eventSlug
string
Filter by event type slug
sortCreatedAt
string
Sort by creation date: “asc” (oldest first) or “desc” (newest first)

Response

Returns an array of event type objects.

Update an Event Type

Update an existing event type (owner only).
curl --request PATCH \
  --url https://api.cal.com/v2/event-types/{eventTypeId} \
  --header 'Authorization: Bearer <api-key>' \
  --header 'cal-api-version: 2024-06-14' \
  --header 'Content-Type: application/json' \
  --data '{
    "title": "45 Minute Meeting",
    "lengthInMinutes": 45
  }'

Path Parameters

eventTypeId
number
required
The ID of the event type to update

Request Body

All fields from the create endpoint are supported. Only include fields you want to update.

Delete an Event Type

Delete an event type (owner only).
curl --request DELETE \
  --url https://api.cal.com/v2/event-types/{eventTypeId} \
  --header 'Authorization: Bearer <api-key>' \
  --header 'cal-api-version: 2024-06-14'

Path Parameters

eventTypeId
number
required
The ID of the event type to delete

Response

status
string
Status of the response (“success”)
data
object
Deleted event type summary

Example Response

{
  "status": "success",
  "data": {
    "id": 123,
    "title": "30 Minute Meeting",
    "slug": "30-min",
    "lengthInMinutes": 30,
    "description": "A quick 30 minute meeting",
    "locations": [
      {
        "type": "link",
        "link": "https://zoom.us/j/123456789"
      }
    ],
    "hidden": false,
    "requiresConfirmation": false,
    "bookingFields": []
  }
}

Notes

  • Event type slugs must be unique within a user’s profile
  • Update and delete operations are restricted to the event type owner
  • Team event types can be accessed by team admins and owners
  • Use scheduleId to link an event type to a specific availability schedule

Build docs developers (and LLMs) love