Create Meeting Type
Create a new meeting type for bookings
POST
Create Meeting Type
Create a new meeting type that defines the rules for a type of meeting, such as its title and duration.
Channels not included in
When you pass a plain string, it is stored under the company’s default language. When you pass an object, each key is a language code (e.g.
When multiple locations are provided, the attendee can choose on the booking page:
Endpoint
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 |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
meetingInfo | object | Yes | Core meeting configuration |
meetingOptions | object | No | Meeting options (channels, channel availability, etc.) |
slug | string | No | URL-friendly identifier (auto-generated if omitted) |
availabilityId | string | No | ID of existing availability to use |
availability | object | No | Create new availability inline (mutually exclusive with availabilityId) |
locations | string[] | No | Address(es) for in-person meetings. When multiple locations are provided, the attendee can choose. |
ics | object | No | Calendar invite settings (title, description, location). See ics. |
metadata | object | No | Key-value pairs for external system correlation |
options | object | No | Request options (e.g., createOneTimeLink) |
meetingInfo (required)
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name for the meeting type |
description | string | Yes | Description shown on booking page |
duration | number | Yes | Duration in minutes |
channel | string | Yes | google, zoom, teamsForBusiness2, phone, local, whereby, custom, connect, webex, jitsi |
bufferBefore | number | No | Minutes blocked before meeting (default: 0) |
bufferAfter | number | No | Minutes blocked after meeting (default: 0) |
color | string | No | Color in RGB format, e.g. rgb(0, 153, 255) |
customChannelName | string | No | Display label for a custom meeting channel (used when channel is custom) |
customChannelLink | string | No | URL for the custom meeting channel (required when channel is custom) |
meetingOptions
| Field | Type | Required | Description |
|---|---|---|---|
allowedChannels | string[] | No | Channel options the attendee can choose from (e.g., ["zoom", "phone", "local"]). When more than one channel is provided, channel selection is automatically enabled on the booking page. |
channelAvailabilities | object | No | Per-channel availability overrides. Each key is a channel name, each value is a UUID string (existing availability) or an inline availability object. See Channel Availabilities. |
allowedDurations | number[] | No | Additional duration options in minutes (shown alongside the primary duration) |
allowAddingGuests | boolean | No | Allow attendees to invite additional guests |
allowPhoneOnlyBooking | boolean | No | Allow bookings without attendee email (phone as identifier). For voice AI / phone scheduling use cases. See Voice AI Bot |
doubleOptIn | string | No | Double opt-in setting: useCompanySettings, enabled, disabled |
channelAvailabilities
Override the default availability for specific channels. Each value can be:- A UUID string referencing an existing availability
- An inline availability object (same structure as top-level
availability) that will be created automatically
channelAvailabilities use the meeting type’s default availability.
availability
Create availability inline instead of referencing an existingavailabilityId. Uses the same structure as the Availability API.
metadata
Key-value pairs for integration with external systems. Included in webhook payloads.| Constraint | Limit |
|---|---|
| Max keys | 20 |
| Max value length | 500 characters |
| Value type | String only |
ics
Customize the calendar invite (ICS) that attendees and hosts receive. Each field accepts either a plain string or a multi-language object. If omitted, sensible defaults are used.| Field | Type | Description |
|---|---|---|
title | string | object | Calendar event title template |
description | string | object | Calendar event description template |
location | string | object | Calendar event location template |
en, de) mapping to the template for that language.
Use dynamic tags as placeholders — they are replaced with actual values when the calendar invite is generated. See Update Meeting Type - Dynamic Tags for the full list.
options
| Field | Type | Description |
|---|---|---|
createOneTimeLink | boolean | Create and return a one-time booking link |
Examples
Basic Request
With Buffers
With Custom Channel
With In-Person Location
With Metadata
Store custom data for integration with external systems:With Specific Time Slots (Exceptions Only)
Create availability with specific datetime slots only—no recurring weekly schedule:When
schedule is omitted from availability, the weekly schedule defaults to all days disabled. Only the specified exceptions define available booking windows.With One-Time Link
Create a meeting type with a one-time booking link in a single API call:With Multiple Channels and Channel Availabilities
Create a meeting type where the attendee can choose between channels, each with its own availability:When
allowedChannels has more than one entry, channel selection is automatically enabled on the booking page. You don’t need to set allowSelectChannel explicitly.Response
Success (201 Created)
With metadata and oneTimeLink
Whenoptions.createOneTimeLink is true:
| Field | Description |
|---|---|
id | UUID of the created meeting type |
slug | URL-friendly identifier |
meetingInfo | Core meeting configuration |
meetingInfo.name | Display name |
meetingInfo.duration | Duration in minutes |
meetingInfo.channel | Meeting channel type |
bookingUrl | Public booking URL |
metadata | Custom key-value data (if provided) |
availabilityId | ID of created availability (if availability was provided) |
oneTimeLink | One-time link details (if options.createOneTimeLink was true) |
oneTimeLink.url | Full URL for the one-time booking page |
createdAt | Creation timestamp |
Error Responses
400 Bad Request - Validation Error
409 Conflict - Slug Already Exists
Common Durations
| Duration | Use Case |
|---|---|
| 15 min | Quick check-ins, brief consultations |
| 30 min | Standard meetings, initial calls |
| 45 min | Discovery calls, demos |
| 60 min | Deep-dive sessions, workshops |
| 90 min | Training sessions, comprehensive reviews |
Related Endpoints
List Meeting Types
Get all meeting types for a user
Update Meeting Type
Modify an existing meeting type
Delete Meeting Type
Soft delete a meeting type
Create Meeting Type