Skip to main content
POST
/
v4
/
meeting-type
Create Meeting Type
curl --request POST \
  --url https://api.example.com/v4/meeting-type
Create a new meeting type that defines the rules for a type of meeting, such as its title and duration.

Endpoint

POST /v4/meeting-type

Request Headers

HeaderRequiredDescription
AuthorizationYesBearer <your-api-key>
x-meetergo-api-user-idYesUUID of the user who owns the meeting type
Content-TypeYesapplication/json

Request Body

FieldTypeRequiredDescription
meetingInfoobjectYesCore meeting configuration
slugstringNoURL-friendly identifier (auto-generated if omitted)
availabilityIdstringNoID of existing availability to use
availabilityobjectNoCreate new availability inline (mutually exclusive with availabilityId)
metadataobjectNoKey-value pairs for external system correlation
optionsobjectNoRequest options (e.g., createOneTimeLink)

meetingInfo (required)

FieldTypeRequiredDescription
namestringYesDisplay name for the meeting type
descriptionstringYesDescription shown on booking page
durationnumberYesDuration in minutes
channelstringYesgoogle_meet, zoom, teams, phone, in_person, whereby, custom
bufferBeforenumberNoMinutes blocked before meeting (default: 0)
bufferAfternumberNoMinutes blocked after meeting (default: 0)
colorstringNoColor in RGB format, e.g. rgb(0, 153, 255)

availability

Create availability inline instead of referencing an existing availabilityId. Uses the same structure as the Availability API.
FieldTypeRequiredDescription
namestringYesName for the availability schedule
timezonestringYesIANA timezone (e.g., Europe/Berlin)
scheduleobjectNoWeekly recurring schedule (format). If omitted, all days default to disabled.
exceptionsarrayNoDate-specific overrides (format)
For ticket-based scheduling with specific time slots, omit schedule and use only exceptions. See Exceptions-Only Availability.

metadata

Key-value pairs for integration with external systems. Included in webhook payloads.
ConstraintLimit
Max keys20
Max value length500 characters
Value typeString only

options

FieldTypeDescription
createOneTimeLinkbooleanCreate and return a one-time booking link

Examples

Basic Request

curl -X POST "https://api.meetergo.com/v4/meeting-type" \
  -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": "Quick 15min Chat",
      "description": "A quick call to discuss your questions",
      "duration": 15,
      "channel": "google_meet"
    },
    "slug": "quick-chat"
  }'

With Buffers

{
  "meetingInfo": {
    "name": "Product Demo",
    "description": "A 45-minute walkthrough of our product features",
    "duration": 45,
    "channel": "zoom",
    "bufferBefore": 15,
    "bufferAfter": 10
  },
  "slug": "product-demo"
}

With Metadata

Store custom data for integration with external systems:
{
  "meetingInfo": {
    "name": "Property Evaluation",
    "description": "On-site property evaluation",
    "duration": 60,
    "channel": "phone"
  },
  "metadata": {
    "ticketId": "EVAL-12345",
    "propertyAddress": "123 Main St",
    "source": "crm-integration"
  }
}

With Specific Time Slots (Exceptions Only)

Create availability with specific datetime slots only—no recurring weekly schedule:
{
  "meetingInfo": {
    "name": "Ticket Consultation",
    "description": "One-time consultation for ticket #12345",
    "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-27T14:00", "end": "2026-01-27T15:00" },
      { "available": true, "start": "2026-01-28T09:00", "end": "2026-01-28T10:00" }
    ]
  },
  "metadata": {
    "ticketId": "EVAL-12345"
  }
}
When schedule is omitted from availability, the weekly schedule defaults to all days disabled. Only the specified exceptions define available booking windows.
Create a meeting type with a one-time booking link in a single API call:
{
  "meetingInfo": {
    "name": "Scheduled Callback",
    "description": "One-time callback for support case",
    "duration": 30,
    "channel": "phone"
  },
  "availability": {
    "name": "Callback Availability",
    "timezone": "Europe/Berlin",
    "exceptions": [
      { "available": true, "start": "2026-01-27T10:00", "end": "2026-01-27T11:00" }
    ]
  },
  "metadata": {
    "caseId": "CASE-789"
  },
  "options": {
    "createOneTimeLink": true
  }
}

Response

Success (201 Created)

{
  "id": "770e8400-e29b-41d4-a716-446655440002",
  "slug": "quick-chat",
  "meetingInfo": {
    "name": "Quick 15min Chat",
    "description": "A quick call to discuss your questions",
    "duration": 15,
    "channel": "google_meet"
  },
  "bookingUrl": "https://cal.meetergo.com/john-smith/quick-chat",
  "createdAt": "2024-01-15T10:30:00Z"
}
When options.createOneTimeLink is true:
{
  "id": "770e8400-e29b-41d4-a716-446655440002",
  "slug": "property-evaluation-abc123",
  "meetingInfo": {
    "name": "Property Evaluation",
    "description": "On-site property evaluation",
    "duration": 60,
    "channel": "phone"
  },
  "bookingUrl": "https://cal.meetergo.com/john-smith/property-evaluation-abc123",
  "metadata": {
    "ticketId": "EVAL-12345",
    "source": "crm-integration"
  },
  "availabilityId": "880e8400-e29b-41d4-a716-446655440003",
  "oneTimeLink": {
    "id": "abc123xyz",
    "url": "https://cal.meetergo.com/1t/abc123xyz",
    "meetingTypeId": "770e8400-e29b-41d4-a716-446655440002"
  },
  "createdAt": "2024-01-15T10:30:00Z"
}
FieldDescription
idUUID of the created meeting type
slugURL-friendly identifier
meetingInfoCore meeting configuration
meetingInfo.nameDisplay name
meetingInfo.durationDuration in minutes
meetingInfo.channelMeeting channel type
bookingUrlPublic booking URL
metadataCustom key-value data (if provided)
availabilityIdID of created availability (if availability was provided)
oneTimeLinkOne-time link details (if options.createOneTimeLink was true)
oneTimeLink.urlFull URL for the one-time booking page
createdAtCreation timestamp

Error Responses

400 Bad Request - Validation Error

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

409 Conflict - Slug Already Exists

{
  "statusCode": 409,
  "message": "A meeting type with this slug already exists",
  "error": "Conflict"
}

Common Durations

DurationUse Case
15 minQuick check-ins, brief consultations
30 minStandard meetings, initial calls
45 minDiscovery calls, demos
60 minDeep-dive sessions, workshops
90 minTraining sessions, comprehensive reviews