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

# Update Meeting Type

> Update an existing meeting type

Update an existing meeting type to change its name, duration, or other settings.

## Endpoint

```
PATCH /v4/meeting-type/{meetingTypeId}
```

## Request Headers

| Header | Required | Description |
| - | - | - |
| `Authorization` | Yes | `Bearer <your-api-key>` |
| `x-meetergo-api-user-id` | Yes | UUID of the user who owns the meeting type |
| `Content-Type` | Yes | `application/json` |

## Path Parameters

| Parameter | Type | Required | Description |
| - | - | - | - |
| `meetingTypeId` | string | Yes | UUID of the meeting type to update |

<Tip>
  Get the `meetingTypeId` from the response when [creating a user](/api-reference/users/create-user) or [creating a meeting type](/api-reference/meeting-types/create-meeting-type).
</Tip>

## Request Body

All fields are optional. Only include the fields you want to update.

| Field | Type | Description |
| - | - | - |
| `meetingInfo` | object | Core meeting configuration (name, duration, channel, buffers, etc.) |
| `meetingOptions` | object | Meeting options (channels, channel availability, etc.) |
| `enabled` | boolean | Enable or disable the meeting type |
| `slug` | string | URL-friendly identifier |
| `timeslotInterval` | number | Timeslot interval in minutes (5-60) |
| `spots` | number | Available spots per timeslot (1-100) |
| `bookingMinimum` | number | Minimum booking notice in minutes |
| `locations` | string\[] | Address(es) for in-person meetings. When multiple are provided, attendee can choose. |
| `availabilityId` | string | ID of an existing availability to associate |
| `ics` | object | Calendar invite settings (title, description, location). See [ics](#ics) below. |

### meetingInfo

| Field | Type | Description |
| - | - | - |
| `name` | string | Display name for the meeting type |
| `description` | string | Description shown on the booking page |
| `duration` | number | Meeting duration in minutes (5-480) |
| `channel` | string | Meeting channel type |
| `customChannelName` | string | Display label for a custom meeting channel (used when `channel` is `custom`) |
| `customChannelLink` | string | URL for the custom meeting channel (required when `channel` is `custom`) |
| `bufferBefore` | number | Minutes blocked before meeting (0-120) |
| `bufferAfter` | number | Minutes blocked after meeting (0-120) |

### meetingOptions

| Field | Type | Description |
| - | - | - |
| `allowedChannels` | string\[] | Channel options the attendee can choose from. When more than one channel is provided, channel selection is automatically enabled. |
| `channelAvailabilities` | object | Per-channel availability overrides. Each value is a UUID string or an inline availability object. See [Create Meeting Type - channelAvailabilities](/api-reference/meeting-types/create-meeting-type#channelavailabilities). |
| `allowedDurations` | number\[] | Additional duration options in minutes |
| `allowAddingGuests` | boolean | Allow attendees to invite additional guests |
| `allowPhoneOnlyBooking` | boolean | Allow bookings without attendee email (phone as identifier). See [Voice AI Bot](/developer-docs/recipes/voice-ai-bot) |

### ics

Customize the calendar invite (ICS) that attendees and hosts receive. Each field accepts either a **plain string** or a **multi-language object**.

| Field | Type | Description |
| - | - | - |
| `title` | string \| object | Calendar event title template |
| `description` | string \| object | Calendar event description template |
| `location` | string \| object | Calendar event location template |

When you pass a **plain string**, it is stored under the meeting type's default language. When you pass an **object**, each key is a language code (e.g. `en`, `de`) mapping to the template for that language.

Partial updates are supported: sending only `description` preserves the existing `title` and `location`. Sending `{ "de": "..." }` preserves other languages within that field.

#### Dynamic Tags

Use these placeholders in your templates — they are replaced with actual values when the calendar invite is generated.

**Guest:**

| Tag | Description |
| - | - |
| `{!M.Guest.Fullname}` | Full name |
| `{!M.Guest.FirstName}` | First name |
| `{!M.Guest.LastName}` | Last name |
| `{!M.Guest.Email}` | Email address |
| `{!M.Guest.Phone}` | Phone number |
| `{!M.Guest.QuestionsAndAnswers}` | All form answers |

**Host:**

| Tag | Description |
| - | - |
| `{!M.Host.Fullname}` | Full name |
| `{!M.Host.Email}` | Email address |

**Meeting:**

| Tag | Description |
| - | - |
| `{!M.Meeting.Name}` | Meeting type name |
| `{!M.Meeting.Description}` | Meeting type description |
| `{!M.Meeting.Location}` | Meeting location |
| `{!M.Meeting.Link}` | Join link |
| `{!M.Meeting.Venue}` | Venue / address |
| `{!M.Meeting.Start}` | Start date and time |
| `{!M.Meeting.Reschedule}` | Reschedule link |
| `{!M.Meeting.Cancel}` | Cancellation link |

## Examples

### Update Name and Duration

<CodeGroup>
  ```bash cURL theme={null}
  curl -X PATCH "https://api.meetergo.com/v4/meeting-type/770e8400-e29b-41d4-a716-446655440002" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "x-meetergo-api-user-id: 550e8400-e29b-41d4-a716-446655440000" \
    -H "Content-Type: application/json" \
    -d '{
      "meetingInfo": {
        "name": "Updated Meeting Name",
        "duration": 60,
        "description": "A longer consultation meeting"
      }
    }'
  ```

  ```javascript JavaScript theme={null}
  const meetingTypeId = '770e8400-e29b-41d4-a716-446655440002';

  const response = await fetch(`https://api.meetergo.com/v4/meeting-type/${meetingTypeId}`, {
    method: 'PATCH',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'x-meetergo-api-user-id': '550e8400-e29b-41d4-a716-446655440000',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      meetingInfo: {
        name: 'Updated Meeting Name',
        duration: 60,
        description: 'A longer consultation meeting'
      }
    })
  });

  const meetingType = await response.json();
  ```

  ```python Python theme={null}
  import requests

  meeting_type_id = '770e8400-e29b-41d4-a716-446655440002'

  response = requests.patch(
      f'https://api.meetergo.com/v4/meeting-type/{meeting_type_id}',
      headers={
          'Authorization': 'Bearer YOUR_API_KEY',
          'x-meetergo-api-user-id': '550e8400-e29b-41d4-a716-446655440000',
          'Content-Type': 'application/json'
      },
      json={
          'meetingInfo': {
              'name': 'Updated Meeting Name',
              'duration': 60,
              'description': 'A longer consultation meeting'
          }
      }
  )

  meeting_type = response.json()
  ```
</CodeGroup>

### Update Custom Channel

```json theme={null}
{
  "meetingInfo": {
    "channel": "custom",
    "customChannelName": "Company Webinar Platform",
    "customChannelLink": "https://webinar.example.com/room/abc123"
  }
}
```

### Update In-Person Location

```json theme={null}
{
  "locations": ["Berlin Office - Friedrichstr. 123", "Munich Office - Marienplatz 5"]
}
```

<Note>
  The `locations` field is used with the `local` (in-person at host) channel. When multiple locations are provided, the attendee can choose on the booking page.
</Note>

### Update Channel Availabilities

Add or replace per-channel availability overrides:

```json theme={null}
{
  "meetingOptions": {
    "allowedChannels": ["zoom", "phone", "local"],
    "channelAvailabilities": {
      "phone": {
        "name": "Phone Hours",
        "timezone": "Europe/Berlin",
        "schedule": {
          "monday": { "enabled": true, "hours": [{ "start": "08:00", "end": "12:00" }] },
          "tuesday": { "enabled": true, "hours": [{ "start": "08:00", "end": "12:00" }] },
          "wednesday": { "enabled": false, "hours": [] },
          "thursday": { "enabled": false, "hours": [] },
          "friday": { "enabled": false, "hours": [] },
          "saturday": { "enabled": false, "hours": [] },
          "sunday": { "enabled": false, "hours": [] }
        }
      },
      "local": {
        "name": "In-Person Exceptions",
        "timezone": "Europe/Berlin",
        "exceptions": [
          { "available": false, "start": "2026-05-01T00:00", "end": "2026-05-01T23:59", "title": "Office Closed" }
        ]
      }
    }
  }
}
```

<Note>
  Inline availability objects are created automatically and stored as UUIDs. On subsequent reads, `channelAvailabilities` values are always UUID strings.
</Note>

### Update Calendar Invite

Customize what appears in the calendar event description:

```json theme={null}
{
  "ics": {
    "description": "{!M.Meeting.Name}\n\nEmail: {!M.Guest.Email}\nPhone: {!M.Guest.Phone}\n\nReschedule: {!M.Meeting.Reschedule}\nCancel: {!M.Meeting.Cancel}"
  }
}
```

### Update Calendar Invite (Multi-Language)

Provide different templates per language:

```json theme={null}
{
  "ics": {
    "title": {
      "en": "{!M.Meeting.Name}: {!M.Guest.Fullname} & {!M.Host.Fullname}",
      "de": "{!M.Meeting.Name}: {!M.Guest.Fullname} & {!M.Host.Fullname}"
    },
    "description": {
      "en": "{!M.Meeting.Name}\n\nEmail: {!M.Guest.Email}\nPhone: {!M.Guest.Phone}\n\nReschedule: {!M.Meeting.Reschedule}\nCancel: {!M.Meeting.Cancel}",
      "de": "{!M.Meeting.Name}\n\nE-Mail: {!M.Guest.Email}\nTelefon: {!M.Guest.Phone}\n\nVerschieben: {!M.Meeting.Reschedule}\nAbsagen: {!M.Meeting.Cancel}"
    },
    "location": "{!M.Meeting.Venue}"
  }
}
```

<Note>
  You can mix string and object formats within the same request. In the example above, `location` is a plain string while `title` and `description` use multi-language objects.
</Note>

## Response

### Success (200 OK)

```json theme={null}
{
  "id": "770e8400-e29b-41d4-a716-446655440002",
  "meetingInfo": {
    "name": "Updated Meeting Name",
    "duration": 60,
    "description": "A longer consultation meeting"
  },
  "slug": "john-smith-45min",
  "bookingUrl": "https://cal.meetergo.com/john-smith/john-smith-45min",
  "updatedAt": "2024-01-15T11:00:00Z"
}
```

### Error Responses

#### 404 Not Found

```json theme={null}
{
  "statusCode": 404,
  "message": "Meeting type not found",
  "error": "Not Found"
}
```

#### 400 Bad Request - Validation Error

```json theme={null}
{
  "statusCode": 400,
  "message": "Validation failed",
  "errors": [
    {
      "field": "duration",
      "message": "Duration must be a positive number"
    }
  ]
}
```

## Related Endpoints

<CardGroup cols={2}>
  <Card title="Create Meeting Type" icon="plus" href="/api-reference/meeting-types/create-meeting-type">
    Create a new meeting type
  </Card>

  <Card title="List Meeting Types" icon="list" href="/api-reference/meeting-types/list-meeting-types">
    Get all meeting types
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.