> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/calcom/cal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Event Types

> Create and manage event types through the Cal.com API

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:

```bash theme={null}
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.

<CodeGroup>
  ```bash cURL theme={null}
  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"
        }
      ]
    }'
  ```
</CodeGroup>

### Request Body

<ParamField body="title" type="string" required>
  Event type title (e.g., "30 Minute Meeting")
</ParamField>

<ParamField body="slug" type="string" required>
  URL-friendly slug for the event type
</ParamField>

<ParamField body="lengthInMinutes" type="number" required>
  Duration of the event in minutes
</ParamField>

<ParamField body="description" type="string">
  Description of the event type
</ParamField>

<ParamField body="locations" type="array">
  Array of location objects

  <Expandable>
    <ParamField body="type" type="string">
      Location type: "integrations:zoom", "integrations:google:meet", "link", "phone", "inPerson"
    </ParamField>

    <ParamField body="link" type="string">
      Meeting link (for type "link")
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="bookingFields" type="array">
  Custom fields to collect from attendees
</ParamField>

<ParamField body="hidden" type="boolean">
  Whether the event type is hidden from your public profile
</ParamField>

<ParamField body="requiresConfirmation" type="boolean">
  Whether bookings require manual confirmation
</ParamField>

<ParamField body="scheduleId" type="number">
  ID of the schedule to use for availability
</ParamField>

### Response

<ResponseField name="status" type="string">
  Status of the response ("success")
</ResponseField>

<ResponseField name="data" type="object">
  Event type details

  <Expandable>
    <ResponseField name="id" type="number">
      Unique event type ID
    </ResponseField>

    <ResponseField name="title" type="string">
      Event type title
    </ResponseField>

    <ResponseField name="slug" type="string">
      URL slug
    </ResponseField>

    <ResponseField name="lengthInMinutes" type="number">
      Event duration in minutes
    </ResponseField>

    <ResponseField name="locations" type="array">
      Configured locations
    </ResponseField>

    <ResponseField name="bookingFields" type="array">
      Custom booking fields
    </ResponseField>
  </Expandable>
</ResponseField>

## Get an Event Type

Retrieve a specific event type by ID.

<CodeGroup>
  ```bash cURL theme={null}
  curl --request GET \
    --url https://api.cal.com/v2/event-types/{eventTypeId} \
    --header 'Authorization: Bearer <api-key>' \
    --header 'cal-api-version: 2024-06-14'
  ```
</CodeGroup>

### Path Parameters

<ParamField path="eventTypeId" type="number" required>
  The ID of the event type to retrieve
</ParamField>

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

<CodeGroup>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api.cal.com/v2/event-types?usernames=alice&sortCreatedAt=desc' \
    --header 'cal-api-version: 2024-06-14'
  ```
</CodeGroup>

### Query Parameters

<ParamField query="usernames" type="string">
  Filter by username(s), comma-separated
</ParamField>

<ParamField query="eventSlug" type="string">
  Filter by event type slug
</ParamField>

<ParamField query="sortCreatedAt" type="string">
  Sort by creation date: "asc" (oldest first) or "desc" (newest first)
</ParamField>

### Response

Returns an array of event type objects.

## Update an Event Type

Update an existing event type (owner only).

<CodeGroup>
  ```bash cURL theme={null}
  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
    }'
  ```
</CodeGroup>

### Path Parameters

<ParamField path="eventTypeId" type="number" required>
  The ID of the event type to update
</ParamField>

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

<CodeGroup>
  ```bash cURL theme={null}
  curl --request DELETE \
    --url https://api.cal.com/v2/event-types/{eventTypeId} \
    --header 'Authorization: Bearer <api-key>' \
    --header 'cal-api-version: 2024-06-14'
  ```
</CodeGroup>

### Path Parameters

<ParamField path="eventTypeId" type="number" required>
  The ID of the event type to delete
</ParamField>

### Response

<ResponseField name="status" type="string">
  Status of the response ("success")
</ResponseField>

<ResponseField name="data" type="object">
  Deleted event type summary

  <Expandable>
    <ResponseField name="id" type="number">
      Event type ID
    </ResponseField>

    <ResponseField name="slug" type="string">
      Event type slug
    </ResponseField>

    <ResponseField name="title" type="string">
      Event type title
    </ResponseField>

    <ResponseField name="lengthInMinutes" type="number">
      Event duration
    </ResponseField>
  </Expandable>
</ResponseField>

## Example Response

```json theme={null}
{
  "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
