Skip to main content
Meeting Types are templates that define the rules for a specific type of meeting. Each meeting type has its own booking URL and settings.

Meeting Type Properties

PropertyDescription
nameDisplay name shown on booking pages
durationLength in minutes
slugURL-friendly identifier
bufferTime blocked before/after meetings
channelVideo conferencing platform
metadataCustom key-value data for integrations

Create a Meeting Type

curl -X POST "https://api.meetergo.com/v4/meeting-type" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-meetergo-api-user-id: {userId}" \
  -H "Content-Type: application/json" \
  -d '{
    "meetingInfo": {
      "name": "Discovery Call",
      "description": "Learn about your needs",
      "duration": 30,
      "channel": "google_meet"
    },
    "slug": "discovery-call"
  }'

Request Body

FieldTypeRequiredDescription
meetingInfoobjectYesCore meeting configuration
meetingInfo.namestringYesDisplay name (e.g., “30 Minute Call”)
meetingInfo.descriptionstringYesDescription shown on booking page
meetingInfo.durationnumberYesDuration in minutes
meetingInfo.channelstringYesgoogle_meet, zoom, teams, phone, in_person, whereby, custom
meetingInfo.bufferBeforenumberNoMinutes blocked before meeting
meetingInfo.bufferAfternumberNoMinutes blocked after meeting
slugstringNoURL slug (auto-generated if not provided)
metadataobjectNoKey-value pairs for custom data
availabilityobjectNoInline availability with schedule and/or exceptions
optionsobjectNoOptions like createOneTimeLink

Response

{
  "id": "770e8400-e29b-41d4-a716-446655440002",
  "slug": "discovery-call",
  "meetingInfo": {
    "name": "Discovery Call",
    "description": "Learn about your needs",
    "duration": 30,
    "channel": "google_meet"
  },
  "bookingUrl": "https://cal.meetergo.com/john-smith/discovery-call"
}

List Meeting Types

Get all meeting types for a user:
curl -X GET "https://api.meetergo.com/v4/meeting-type" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-meetergo-api-user-id: {userId}"

Response

[
  {
    "id": "770e8400-e29b-41d4-a716-446655440002",
    "slug": "discovery-call",
    "meetingInfo": {
      "name": "Discovery Call",
      "description": "Let's discuss your needs",
      "duration": 30,
      "channel": "google_meet"
    },
    "bookingUrl": "https://cal.meetergo.com/john-smith/discovery-call"
  },
  {
    "id": "770e8400-e29b-41d4-a716-446655440003",
    "slug": "demo",
    "meetingInfo": {
      "name": "Demo Session",
      "description": "See our product in action",
      "duration": 60,
      "channel": "zoom"
    },
    "bookingUrl": "https://cal.meetergo.com/john-smith/demo"
  }
]

Update a Meeting Type

curl -X PATCH "https://api.meetergo.com/v4/meeting-type/{meetingTypeId}" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-meetergo-api-user-id: {userId}" \
  -H "Content-Type: application/json" \
  -d '{
    "meetingInfo": {
      "name": "Quick Chat",
      "duration": 15
    }
  }'

Video Conferencing

Specify the video conferencing channel when booking:
ChannelDescription
google_meetGoogle Meet link (requires integration)
zoomZoom meeting (requires integration)
teamsMicrosoft Teams (requires integration)
wherebyWhereby room
phonePhone call
in_personIn-person meeting
When creating a booking, specify the channel:
{
  "meetingTypeId": "770e8400-e29b-41d4-a716-446655440002",
  "start": "2024-01-15T09:00:00+01:00",
  "hostIds": ["550e8400-e29b-41d4-a716-446655440000"],
  "channel": "zoom",
  "attendee": {
    "email": "[email protected]",
    "firstname": "Jane"
  }
}

Buffer Times

Buffer times prevent back-to-back meetings. Set bufferBefore and bufferAfter in meetingInfo:
{
  "meetingInfo": {
    "name": "Strategy Session",
    "description": "Deep dive into your strategy",
    "duration": 60,
    "channel": "zoom",
    "bufferBefore": 15,
    "bufferAfter": 15
  }
}
This creates a 60-minute meeting with 15 minutes blocked before and after. Example schedule impact:
Actual TimeAvailability
9:00-9:15Blocked (buffer before)
9:15-10:15Meeting
10:15-10:30Blocked (buffer after)
10:30+Available

Multiple Durations

Some meeting types support multiple durations. The attendee chooses when booking:
{
  "meetingInfo": {
    "name": "Consultation",
    "description": "Choose your preferred meeting length",
    "durations": [15, 30, 60],
    "defaultDuration": 30,
    "channel": "google_meet"
  }
}
When booking, specify the duration:
{
  "meetingTypeId": "770e8400-e29b-41d4-a716-446655440002",
  "start": "2024-01-15T09:00:00+01:00",
  "duration": 60,
  "hostIds": ["550e8400-e29b-41d4-a716-446655440000"],
  "attendee": { "email": "[email protected]" }
}

Common Patterns

Sales Discovery

{
  "meetingInfo": {
    "name": "Discovery Call",
    "description": "Let's learn about your business and goals",
    "duration": 30,
    "channel": "google_meet",
    "bufferAfter": 10
  }
}

Technical Demo

{
  "meetingInfo": {
    "name": "Product Demo",
    "description": "See our product in action",
    "duration": 45,
    "channel": "zoom",
    "bufferBefore": 15,
    "bufferAfter": 15
  }
}

Quick Support

{
  "meetingInfo": {
    "name": "Quick Support",
    "description": "Fast help for simple questions",
    "duration": 15,
    "channel": "phone"
  }
}

Strategy Session

{
  "meetingInfo": {
    "name": "Strategy Session",
    "description": "Deep dive into your strategy",
    "duration": 90,
    "channel": "zoom",
    "bufferBefore": 30,
    "bufferAfter": 15
  }
}

Ticket-Based Scheduling

Create meeting types with specific time slots and metadata for ticket correlation:
{
  "meetingInfo": {
    "name": "Property Evaluation",
    "description": "On-site property evaluation",
    "duration": 60,
    "channel": "phone"
  },
  "availability": {
    "name": "Ticket Availability",
    "timezone": "Europe/Berlin",
    "exceptions": [
      { "available": true, "start": "2026-01-27T10:00", "end": "2026-01-27T11:00" },
      { "available": true, "start": "2026-01-28T14:00", "end": "2026-01-28T15:00" }
    ]
  },
  "metadata": {
    "ticketId": "EVAL-12345",
    "source": "crm"
  },
  "options": {
    "createOneTimeLink": true
  }
}

Metadata

Store custom key-value data on meeting types for integration with external systems. Metadata is included in webhook payloads for correlation.
{
  "meetingInfo": {
    "name": "Support Callback",
    "description": "Scheduled callback for support case",
    "duration": 30,
    "channel": "phone"
  },
  "metadata": {
    "ticketId": "SUPPORT-789",
    "customerId": "cust_abc123",
    "priority": "high"
  }
}
ConstraintLimit
Max keys20
Max value length500 characters
Value typeString only
Create a single-use booking link in the same API call using options.createOneTimeLink:
{
  "meetingInfo": {
    "name": "Scheduled Callback",
    "description": "One-time callback for support case",
    "duration": 30,
    "channel": "phone"
  },
  "options": {
    "createOneTimeLink": true
  }
}
Response includes the one-time link:
{
  "id": "770e8400-e29b-41d4-a716-446655440002",
  "slug": "scheduled-callback",
  "meetingInfo": {
    "name": "Scheduled Callback",
    "description": "One-time callback for support case",
    "duration": 30,
    "channel": "phone"
  },
  "bookingUrl": "https://cal.meetergo.com/john-smith/scheduled-callback",
  "oneTimeLink": {
    "id": "abc123xyz",
    "url": "https://cal.meetergo.com/1t/abc123xyz",
    "meetingTypeId": "770e8400-e29b-41d4-a716-446655440002"
  }
}
One-time links expire after a single booking, making them ideal for ticket-based workflows.

Delete a Meeting Type

Soft delete a meeting type when it’s no longer needed:
curl -X DELETE "https://api.meetergo.com/v4/meeting-type/{meetingTypeId}" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-meetergo-api-user-id: {userId}"
  • The meeting type is marked as deleted but retained for historical records
  • Existing bookings are preserved
  • The booking URL stops accepting new bookings

Best Practices

Use descriptive names - “30 Minute Discovery Call” is clearer than “Call”
Add buffer times - Give yourself time to prepare and wrap up
Keep slugs short - discovery is better than 30-minute-discovery-call-with-sales
Slug uniqueness - Each meeting type slug must be unique per user