Meeting types
The meetings people can book with you.
List meeting types
/v1/meeting-typesmeeting-types.listNeeds the scheduler feature on your workspace. Until it is on, calls answer 404.
Every live type in the workspace, oldest first; ownerMemberId narrows to one member. The caller's own Intro call is created on first view (never a client seat's). limit 1-200 (default 50), cursor from pagination.nextCursor.
Parameters
400 workspace_required).Response 200
data is a list of MeetingTypeModel. Each item has these fields. The response also carries pagination.
curl -X GET "https://api.ken.so/v1/meeting-types" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
{
"success": true,
"data": [
{
"lengthMinutes": 1,
"locationKind": "string",
"locationDetail": "string",
"minimumNoticeMinutes": 1,
"bookingWindowDays": 1,
"bufferBeforeMinutes": 1,
"bufferAfterMinutes": 1,
"dailyCap": 1,
"reminderEnabled": true,
"reminderText": "string",
"questions": [
{
"id": "string",
"label": "string",
"kind": "string",
"required": true,
"options": [
"string"
]
}
],
"id": 812,
"kind": "string",
"ownerMemberId": 812,
"name": "string",
"slug": "string",
"description": "string",
"isSecret": true,
"isEnabled": true,
"isDefault": true,
"availability": {
"timeZone": "string",
"weekly": {
"monday": [
{}
],
"tuesday": [
{}
],
"wednesday": [
{}
],
"thursday": [
{}
],
"friday": [
{}
],
"saturday": [
{}
],
"sunday": [
{}
]
},
"overrides": [
{
"date": "string",
"ranges": []
}
]
},
"hosts": [
{
"memberId": 812,
"displayName": "string",
"position": 1,
"status": "string",
"isOrganizer": true
}
],
"hostsNote": "string",
"createdAt": "2026-09-23T15:02:11Z",
"updatedAt": "2026-09-23T15:02:11Z"
}
],
"pagination": {
"nextCursor": "eyJpZCI6ODE1fQ",
"hasMore": true,
"total": 1,
"isTotalCapped": true
}
}Create a meeting type
/v1/meeting-typesmeeting-types.createNeeds the scheduler feature on your workspace. Until it is on, calls answer 404.
Starts from the workspace's booking defaults; any field in the body overrides them. name is required. slug is generated from the name when omitted. The owner's first type becomes their default. Another member's type (ownerMemberId) needs the members feature. round_robin and collective need an admin, a paid plan (402 plan_limit_reached, refusal scheduler_team_meetings) and hostMemberIds. availability is the type's own schedule for every host, in the shape and rules of the member default on /v1/me/calendar-preferences (a schedule here may have no weekly times); timeZone null reads it in each host's zone. Omitted or null: each host's own default. Busy time, notice, window, buffers and the daily cap still apply on top. Refusals carry paths such as availability.weekly.monday[0].end.
Parameters
400 workspace_required).Request body
application/json, optional.
Response 201
data is a MeetingTypeModel.
curl -X POST "https://api.ken.so/v1/meeting-types" \
-H "Authorization: Bearer $KEN_API_KEY" \
-H "Ken-Version: 2026-11-02" \
-H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{
"lengthMinutes": 1,
"locationKind": "string",
"locationDetail": "string",
"minimumNoticeMinutes": 1,
"bookingWindowDays": 1,
"bufferBeforeMinutes": 1,
"bufferAfterMinutes": 1,
"dailyCap": 1,
"reminderEnabled": true,
"reminderText": "string",
"questions": [
{
"id": "string",
"label": "string",
"kind": "string",
"required": true,
"options": [
"string"
]
}
],
"name": "string",
"slug": "string",
"description": "string",
"isSecret": true,
"isEnabled": true,
"isDefault": true,
"availability": {
"timeZone": "string",
"weekly": {
"monday": [
{
"start": "string",
"end": "string"
}
],
"tuesday": [
{
"start": "string",
"end": "string"
}
],
"wednesday": [
{
"start": "string",
"end": "string"
}
],
"thursday": [
{
"start": "string",
"end": "string"
}
],
"friday": [
{
"start": "string",
"end": "string"
}
],
"saturday": [
{
"start": "string",
"end": "string"
}
],
"sunday": [
{
"start": "string",
"end": "string"
}
]
},
"overrides": [
{
"date": "string",
"ranges": [
{
"start": "string",
"end": "string"
}
]
}
]
},
"kind": "string",
"ownerMemberId": 812,
"hostMemberIds": [
812
]
}'{
"success": true,
"data": {
"lengthMinutes": 1,
"locationKind": "string",
"locationDetail": "string",
"minimumNoticeMinutes": 1,
"bookingWindowDays": 1,
"bufferBeforeMinutes": 1,
"bufferAfterMinutes": 1,
"dailyCap": 1,
"reminderEnabled": true,
"reminderText": "string",
"questions": [
{
"id": "string",
"label": "string",
"kind": "string",
"required": true,
"options": [
"string"
]
}
],
"id": 812,
"kind": "string",
"ownerMemberId": 812,
"name": "string",
"slug": "string",
"description": "string",
"isSecret": true,
"isEnabled": true,
"isDefault": true,
"availability": {
"timeZone": "string",
"weekly": {
"monday": [
{
"start": "string",
"end": "string"
}
],
"tuesday": [
{
"start": "string",
"end": "string"
}
],
"wednesday": [
{
"start": "string",
"end": "string"
}
],
"thursday": [
{
"start": "string",
"end": "string"
}
],
"friday": [
{
"start": "string",
"end": "string"
}
],
"saturday": [
{
"start": "string",
"end": "string"
}
],
"sunday": [
{
"start": "string",
"end": "string"
}
]
},
"overrides": [
{
"date": "string",
"ranges": [
{}
]
}
]
},
"hosts": [
{
"memberId": 812,
"displayName": "string",
"position": 1,
"status": "string",
"isOrganizer": true
}
],
"hostsNote": "string",
"createdAt": "2026-09-23T15:02:11Z",
"updatedAt": "2026-09-23T15:02:11Z"
}
}Get a meeting type
/v1/meeting-types/{meetingTypeId}meeting-types.getNeeds the scheduler feature on your workspace. Until it is on, calls answer 404.
Parameters
400 workspace_required).Response 200
data is a MeetingTypeModel.
curl -X GET "https://api.ken.so/v1/meeting-types/812" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
{
"success": true,
"data": {
"lengthMinutes": 1,
"locationKind": "string",
"locationDetail": "string",
"minimumNoticeMinutes": 1,
"bookingWindowDays": 1,
"bufferBeforeMinutes": 1,
"bufferAfterMinutes": 1,
"dailyCap": 1,
"reminderEnabled": true,
"reminderText": "string",
"questions": [
{
"id": "string",
"label": "string",
"kind": "string",
"required": true,
"options": [
"string"
]
}
],
"id": 812,
"kind": "string",
"ownerMemberId": 812,
"name": "string",
"slug": "string",
"description": "string",
"isSecret": true,
"isEnabled": true,
"isDefault": true,
"availability": {
"timeZone": "string",
"weekly": {
"monday": [
{
"start": "string",
"end": "string"
}
],
"tuesday": [
{
"start": "string",
"end": "string"
}
],
"wednesday": [
{
"start": "string",
"end": "string"
}
],
"thursday": [
{
"start": "string",
"end": "string"
}
],
"friday": [
{
"start": "string",
"end": "string"
}
],
"saturday": [
{
"start": "string",
"end": "string"
}
],
"sunday": [
{
"start": "string",
"end": "string"
}
]
},
"overrides": [
{
"date": "string",
"ranges": [
{}
]
}
]
},
"hosts": [
{
"memberId": 812,
"displayName": "string",
"position": 1,
"status": "string",
"isOrganizer": true
}
],
"hostsNote": "string",
"createdAt": "2026-09-23T15:02:11Z",
"updatedAt": "2026-09-23T15:02:11Z"
}
}Update a meeting type
/v1/meeting-types/{meetingTypeId}meeting-types.updateNeeds the scheduler feature on your workspace. Until it is on, calls answer 404.
Absent fields stay; null clears locationDetail, description, dailyCap, reminderText, questions and availability (back to each host's default; a sent schedule replaces the whole one). A new slug keeps the old link redirecting. isDefault: true makes it the owner's default. A team type needs an admin and a paid plan; hostMemberIds replaces its hosts.
Parameters
400 workspace_required).Request body
application/json, optional.
Response 200
data is a MeetingTypeModel.
curl -X PATCH "https://api.ken.so/v1/meeting-types/812" \
-H "Authorization: Bearer $KEN_API_KEY" \
-H "Ken-Version: 2026-11-02" \
-H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{
"lengthMinutes": 1,
"locationKind": "string",
"locationDetail": "string",
"minimumNoticeMinutes": 1,
"bookingWindowDays": 1,
"bufferBeforeMinutes": 1,
"bufferAfterMinutes": 1,
"dailyCap": 1,
"reminderEnabled": true,
"reminderText": "string",
"questions": [
{
"id": "string",
"label": "string",
"kind": "string",
"required": true,
"options": [
"string"
]
}
],
"name": "string",
"slug": "string",
"description": "string",
"isSecret": true,
"isEnabled": true,
"isDefault": true,
"availability": {
"timeZone": "string",
"weekly": {
"monday": [
{
"start": "string",
"end": "string"
}
],
"tuesday": [
{
"start": "string",
"end": "string"
}
],
"wednesday": [
{
"start": "string",
"end": "string"
}
],
"thursday": [
{
"start": "string",
"end": "string"
}
],
"friday": [
{
"start": "string",
"end": "string"
}
],
"saturday": [
{
"start": "string",
"end": "string"
}
],
"sunday": [
{
"start": "string",
"end": "string"
}
]
},
"overrides": [
{
"date": "string",
"ranges": [
{
"start": "string",
"end": "string"
}
]
}
]
},
"hostMemberIds": [
812
]
}'{
"success": true,
"data": {
"lengthMinutes": 1,
"locationKind": "string",
"locationDetail": "string",
"minimumNoticeMinutes": 1,
"bookingWindowDays": 1,
"bufferBeforeMinutes": 1,
"bufferAfterMinutes": 1,
"dailyCap": 1,
"reminderEnabled": true,
"reminderText": "string",
"questions": [
{
"id": "string",
"label": "string",
"kind": "string",
"required": true,
"options": [
"string"
]
}
],
"id": 812,
"kind": "string",
"ownerMemberId": 812,
"name": "string",
"slug": "string",
"description": "string",
"isSecret": true,
"isEnabled": true,
"isDefault": true,
"availability": {
"timeZone": "string",
"weekly": {
"monday": [
{
"start": "string",
"end": "string"
}
],
"tuesday": [
{
"start": "string",
"end": "string"
}
],
"wednesday": [
{
"start": "string",
"end": "string"
}
],
"thursday": [
{
"start": "string",
"end": "string"
}
],
"friday": [
{
"start": "string",
"end": "string"
}
],
"saturday": [
{
"start": "string",
"end": "string"
}
],
"sunday": [
{
"start": "string",
"end": "string"
}
]
},
"overrides": [
{
"date": "string",
"ranges": [
{}
]
}
]
},
"hosts": [
{
"memberId": 812,
"displayName": "string",
"position": 1,
"status": "string",
"isOrganizer": true
}
],
"hostsNote": "string",
"createdAt": "2026-09-23T15:02:11Z",
"updatedAt": "2026-09-23T15:02:11Z"
}
}Delete a meeting type
/v1/meeting-types/{meetingTypeId}meeting-types.deleteNeeds the scheduler feature on your workspace. Until it is on, calls answer 404.
Soft delete. Deleting the default promotes the owner's oldest other type. A member's last type cannot be deleted (409 invalid_state, last_personal_type): turn it off instead.
Parameters
400 workspace_required).Response 204
curl -X DELETE "https://api.ken.so/v1/meeting-types/812" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
HTTP/1.1 204 No Content
List a meeting type's open times
/v1/meeting-types/{meetingTypeId}/slotsmeeting-types.slotsNeeds the scheduler feature on your workspace. Until it is on, calls answer 404.
from and to (required, at most 31 days) bound each slot's start; timeZone (IANA) labels localStartAt. Status available, no_availability or unavailable with a reason (host_not_member, calendar_not_connected, calendar_needs_reconnect, calendar_provider_error, meeting_type_disabled). 404 for a team type or one not in the workspace.
Parameters
from and at most 31 days later. Required.localStartAt. Absent means the host's zone.400 workspace_required).Response 200
data is a MeetingTypeSlotsModel.
curl -X GET "https://api.ken.so/v1/meeting-types/812/slots" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
{
"success": true,
"data": {
"meetingTypeId": 812,
"hostMemberId": 812,
"lengthMinutes": 1,
"status": "string",
"reason": "string",
"timeZone": "string",
"hostTimeZone": "string",
"slots": [
{
"startAt": "2026-09-23T15:02:11Z",
"endAt": "2026-09-23T15:02:11Z",
"localStartAt": "string"
}
]
}
}