Kenso

Meeting types

The meetings people can book with you.

Meetings and calling6 endpointsKen-Version: 2026-11-02AuthenticationWorkspacesErrors

List meeting types

GET/v1/meeting-typesmeeting-types.list

Needs the scheduler feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

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

Name
In
Type
Required
Description
OwnerMemberId
In: query
integer (int64)
optional
Only this member's types.
Kind
In: query
string
optional
personal, round_robin or collective; comma = OR.
HostMemberId
In: query
integer (int64)
optional
Types this member hosts (team types list the member as a host).
Limit
In: query
integer (int32)
optional
Cursor
In: query
string
optional
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a list of MeetingTypeModel. Each item has these fields. The response also carries pagination.

Field
Type
Description
lengthMinutes
integer (int32)
locationKind
string
locationDetail
string
minimumNoticeMinutes
integer (int32)
bookingWindowDays
integer (int32)
bufferBeforeMinutes
integer (int32)
bufferAfterMinutes
integer (int32)
dailyCap
integer (int32)
reminderEnabled
boolean
reminderText
string
questions
array of MeetingTypeQuestion
id
integer (int64)
kind
string
ownerMemberId
integer (int64)
name
string
slug
string
description
string
isSecret
boolean
isEnabled
boolean
isDefault
boolean
availability
AvailabilityScheduleModel
hosts
array of MeetingTypeHostModel
hostsNote
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
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"
Response 200
{
  "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

POST/v1/meeting-typesmeeting-types.create

Needs the scheduler feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

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

Name
In
Type
Required
Description
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
lengthMinutes
integer (int32)
optional
locationKind
string
optional
locationDetail
string
optional
minimumNoticeMinutes
integer (int32)
optional
bookingWindowDays
integer (int32)
optional
bufferBeforeMinutes
integer (int32)
optional
bufferAfterMinutes
integer (int32)
optional
dailyCap
integer (int32)
optional
reminderEnabled
boolean
optional
reminderText
string
optional
questions
array of MeetingTypeQuestionInput
optional
name
string
optional
slug
string
optional
description
string
optional
isSecret
boolean
optional
isEnabled
boolean
optional
isDefault
boolean
optional
availability
AvailabilityScheduleModel
optional
kind
string
optional
ownerMemberId
integer (int64)
optional
hostMemberIds
array of integer (int64)
optional

Response 201

data is a MeetingTypeModel.

Field
Type
Description
lengthMinutes
integer (int32)
locationKind
string
locationDetail
string
minimumNoticeMinutes
integer (int32)
bookingWindowDays
integer (int32)
bufferBeforeMinutes
integer (int32)
bufferAfterMinutes
integer (int32)
dailyCap
integer (int32)
reminderEnabled
boolean
reminderText
string
questions
array of MeetingTypeQuestion
id
integer (int64)
kind
string
ownerMemberId
integer (int64)
name
string
slug
string
description
string
isSecret
boolean
isEnabled
boolean
isDefault
boolean
availability
AvailabilityScheduleModel
hosts
array of MeetingTypeHostModel
hostsNote
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
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
  ]
}'
Response 201
{
  "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

GET/v1/meeting-types/{meetingTypeId}meeting-types.get

Needs the scheduler feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

Parameters

Name
In
Type
Required
Description
meetingTypeId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a MeetingTypeModel.

Field
Type
Description
lengthMinutes
integer (int32)
locationKind
string
locationDetail
string
minimumNoticeMinutes
integer (int32)
bookingWindowDays
integer (int32)
bufferBeforeMinutes
integer (int32)
bufferAfterMinutes
integer (int32)
dailyCap
integer (int32)
reminderEnabled
boolean
reminderText
string
questions
array of MeetingTypeQuestion
id
integer (int64)
kind
string
ownerMemberId
integer (int64)
name
string
slug
string
description
string
isSecret
boolean
isEnabled
boolean
isDefault
boolean
availability
AvailabilityScheduleModel
hosts
array of MeetingTypeHostModel
hostsNote
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
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"
Response 200
{
  "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

PATCH/v1/meeting-types/{meetingTypeId}meeting-types.update

Needs the scheduler feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

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

Name
In
Type
Required
Description
meetingTypeId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
lengthMinutes
integer (int32)
optional
locationKind
string
optional
locationDetail
string
optional
minimumNoticeMinutes
integer (int32)
optional
bookingWindowDays
integer (int32)
optional
bufferBeforeMinutes
integer (int32)
optional
bufferAfterMinutes
integer (int32)
optional
dailyCap
integer (int32)
optional
reminderEnabled
boolean
optional
reminderText
string
optional
questions
array of MeetingTypeQuestionInput
optional
name
string
optional
slug
string
optional
description
string
optional
isSecret
boolean
optional
isEnabled
boolean
optional
isDefault
boolean
optional
availability
AvailabilityScheduleModel
optional
hostMemberIds
array of integer (int64)
optional

Response 200

data is a MeetingTypeModel.

Field
Type
Description
lengthMinutes
integer (int32)
locationKind
string
locationDetail
string
minimumNoticeMinutes
integer (int32)
bookingWindowDays
integer (int32)
bufferBeforeMinutes
integer (int32)
bufferAfterMinutes
integer (int32)
dailyCap
integer (int32)
reminderEnabled
boolean
reminderText
string
questions
array of MeetingTypeQuestion
id
integer (int64)
kind
string
ownerMemberId
integer (int64)
name
string
slug
string
description
string
isSecret
boolean
isEnabled
boolean
isDefault
boolean
availability
AvailabilityScheduleModel
hosts
array of MeetingTypeHostModel
hostsNote
string
createdAt
string (date-time)
updatedAt
string (date-time)
Request
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
  ]
}'
Response 200
{
  "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

DELETE/v1/meeting-types/{meetingTypeId}meeting-types.delete

Needs the scheduler feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

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

Name
In
Type
Required
Description
meetingTypeId
In: path
integer (int64)
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 204

Request
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"
Response 204
HTTP/1.1 204 No Content

List a meeting type's open times

GET/v1/meeting-types/{meetingTypeId}/slotsmeeting-types.slots

Needs the scheduler feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

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

Name
In
Type
Required
Description
meetingTypeId
In: path
integer (int64)
required
From
In: query
string (date-time)
optional
Earliest slot start, an ISO-8601 instant. Required.
To
In: query
string (date-time)
optional
Latest slot start (exclusive), after from and at most 31 days later. Required.
TimeZone
In: query
string
optional
IANA zone that labels each slot's localStartAt. Absent means the host's zone.
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Response 200

data is a MeetingTypeSlotsModel.

Field
Type
Description
meetingTypeId
integer (int64)
hostMemberId
integer (int64)
lengthMinutes
integer (int32)
status
string
reason
string
timeZone
string
hostTimeZone
string
slots
array of MeetingTypeSlotModel
Request
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"
Response 200
{
  "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"
      }
    ]
  }
}