Kenso

External bookings

Meetings prospects booked on your own Cal.com, Calendly, HubSpot Meetings or Chili Piper pages that Kenso matched to the workspace. Read only.

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

List third-party bookings

GET/v1/external-bookingsexternal-bookings.list

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

Try it on developer.ken.so

Ordered by start, then id. Filters: provider (cal_com, calendly, hubspot or chili_piper, comma = OR); status (booked, rescheduled, cancelled or no_show, comma = OR); campaignId (the credited campaign), accountId and personId; startAfter (start at or after) and startBefore (start before). Each filter narrows the bookings the caller sees. limit 1-200 (default 50), cursor from pagination.nextCursor. An unknown provider or status is 400 validation_failed. Needs the meetings feature and the Calendar page (view).

Parameters

Name
In
Type
Required
Description
Limit
In: query
integer (int32)
optional
Cursor
In: query
string
optional
Provider
In: query
string
optional
cal_com, calendly, hubspot or chili_piper; comma = OR.
Status
In: query
string
optional
booked, rescheduled, cancelled or no_show; comma = OR.
CampaignId
In: query
integer (int64)
optional
Only bookings credited to this campaign.
AccountId
In: query
integer (int64)
optional
PersonId
In: query
integer (int64)
optional
StartAfter
In: query
string (date-time)
optional
Start at or after.
StartBefore
In: query
string (date-time)
optional
Start before.
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 ExternalBookingModel. Each item has these fields. The response also carries pagination.

Field
Type
Description
id
integer (int64)
provider
string
status
string
hostMemberId
integer (int64)
startAt
string (date-time)
endAt
string (date-time)
invitee
ExternalBookingInviteeModel
contactId
integer (int64)
personId
integer (int64)
accountId
integer (int64)
campaignId
integer (int64)
stepOrder
integer (int32)
attribution
string
meetingId
integer (int64)
cancelledAt
string (date-time)
cancelReason
string
noShowAt
string (date-time)
createdAt
string (date-time)
updatedAt
string (date-time)
Request
curl -X GET "https://api.ken.so/v1/external-bookings" \
  -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": [
    {
      "id": 812,
      "provider": "string",
      "status": "string",
      "hostMemberId": 812,
      "startAt": "2026-09-23T15:02:11Z",
      "endAt": "2026-09-23T15:02:11Z",
      "invitee": {
        "name": "string",
        "email": "[email protected]"
      },
      "contactId": 812,
      "personId": 812,
      "accountId": 812,
      "campaignId": 812,
      "stepOrder": 1,
      "attribution": "string",
      "meetingId": 812,
      "cancelledAt": "2026-09-23T15:02:11Z",
      "cancelReason": "string",
      "noShowAt": "2026-09-23T15:02:11Z",
      "createdAt": "2026-09-23T15:02:11Z",
      "updatedAt": "2026-09-23T15:02:11Z"
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6ODE1fQ",
    "hasMore": true,
    "total": 1,
    "isTotalCapped": true
  }
}

Get a third-party booking

GET/v1/external-bookings/{externalBookingId}external-bookings.get

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

Try it on developer.ken.so

404 for a booking in another workspace or one the caller cannot see (as on the list). Needs the meetings feature and the Calendar page (view).

Parameters

Name
In
Type
Required
Description
externalBookingId
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 ExternalBookingModel.

Field
Type
Description
id
integer (int64)
provider
string
status
string
hostMemberId
integer (int64)
startAt
string (date-time)
endAt
string (date-time)
invitee
ExternalBookingInviteeModel
contactId
integer (int64)
personId
integer (int64)
accountId
integer (int64)
campaignId
integer (int64)
stepOrder
integer (int32)
attribution
string
meetingId
integer (int64)
cancelledAt
string (date-time)
cancelReason
string
noShowAt
string (date-time)
createdAt
string (date-time)
updatedAt
string (date-time)
Request
curl -X GET "https://api.ken.so/v1/external-bookings/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": {
    "id": 812,
    "provider": "string",
    "status": "string",
    "hostMemberId": 812,
    "startAt": "2026-09-23T15:02:11Z",
    "endAt": "2026-09-23T15:02:11Z",
    "invitee": {
      "name": "string",
      "email": "[email protected]"
    },
    "contactId": 812,
    "personId": 812,
    "accountId": 812,
    "campaignId": 812,
    "stepOrder": 1,
    "attribution": "string",
    "meetingId": 812,
    "cancelledAt": "2026-09-23T15:02:11Z",
    "cancelReason": "string",
    "noShowAt": "2026-09-23T15:02:11Z",
    "createdAt": "2026-09-23T15:02:11Z",
    "updatedAt": "2026-09-23T15:02:11Z"
  }
}