agentlyleads docs
Bookings API

API Reference

The reference below covers every endpoint in the Bookings API. Code examples are generated automatically; the live playground is disabled to prevent accidental writes to production from the docs site.

GET/api/v1/bookings

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Query Parameters

scope?string

Which bookings. upcoming = confirmed and not yet ended.

Default"upcoming"

Value in

  • "upcoming"
  • "past"
  • "cancelled"
  • "all"
hostUserId?string

Only this host's bookings.

from?string

Only bookings starting at or after this ISO 8601 date or datetime.

to?string

Only bookings starting before this ISO 8601 date or datetime.

limit?integer

Page size.

Range1 <= value <= 200
Default50
cursor?string

nextCursor from the previous page.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/bookings"
{  "bookings": [    {      "id": "cmq9book0alk34567890",      "status": "CONFIRMED",      "startAt": "2026-10-05T13:00:00.000Z",      "endAt": "2026-10-05T13:30:00.000Z",      "hostTimezone": "America/New_York",      "inviteeTimezone": "Europe/London",      "host": {        "id": "cmq1user0alk34567890",        "name": "Kevin Shah",        "email": "kevin@example.com"      },      "bookingType": {        "id": "cmq8type0alk34567890",        "title": "Intro call",        "slug": "intro-call",        "durationMin": 30,        "locationKind": "GOOGLE_MEET",        "locationValue": null      },      "inviteeName": "Dana Reed",      "inviteeEmail": "dana@example.com",      "inviteePhone": null,      "inviteeNotes": "Pricing for 40 seats.",      "guests": [],      "answers": [        {          "label": "Company size",          "value": "40"        }      ],      "contactId": "cmq2cont0alk34567891",      "leadId": null,      "taskId": "cmq7task0alk34567890",      "joinUrl": "https://meet.google.com/abc-defg-hij",      "onHostCalendar": true,      "sequence": 0,      "cancelReason": null,      "cancelledBy": null,      "cancelledAt": null,      "createdAt": "2026-09-27T14:02:00.000Z"    }  ],  "nextCursor": null}
{  "error": "scope must be one of: upcoming, past, cancelled, all."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:bookings."}
{  "error": "No active user with that hostUserId in this workspace."}
{  "error": "Rate limit exceeded."}
POST/api/v1/bookings

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/bookings" \  -H "Content-Type: application/json" \  -d '{    "bookingTypeId": "cmq8type0alk34567890",    "startAt": "2026-10-05T13:00:00.000Z",    "inviteeName": "Dana Reed",    "inviteeEmail": "dana@example.com",    "inviteeTimezone": "Europe/London",    "answers": {      "size": "40"    }  }'
{  "booking": {    "id": "cmq9book0alk34567890",    "status": "CONFIRMED",    "startAt": "2026-10-05T13:00:00.000Z",    "endAt": "2026-10-05T13:30:00.000Z",    "hostTimezone": "America/New_York",    "inviteeTimezone": "Europe/London",    "host": {      "id": "cmq1user0alk34567890",      "name": "Kevin Shah",      "email": "kevin@example.com"    },    "bookingType": {      "id": "cmq8type0alk34567890",      "title": "Intro call",      "slug": "intro-call",      "durationMin": 30,      "locationKind": "GOOGLE_MEET",      "locationValue": null    },    "inviteeName": "Dana Reed",    "inviteeEmail": "dana@example.com",    "inviteePhone": null,    "inviteeNotes": "Pricing for 40 seats.",    "guests": [],    "answers": [      {        "label": "Company size",        "value": "40"      }    ],    "contactId": "cmq2cont0alk34567891",    "leadId": null,    "taskId": "cmq7task0alk34567890",    "joinUrl": "https://meet.google.com/abc-defg-hij",    "onHostCalendar": true,    "sequence": 0,    "cancelReason": null,    "cancelledBy": null,    "cancelledAt": null,    "createdAt": "2026-09-27T14:02:00.000Z"  },  "taskId": "cmq7task0alk34567890"}
{  "error": "Please add a phone number so we can call you."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "Meeting type not found."}
{  "error": "That time has just been booked. Please pick another one."}
{  "error": "Rate limit exceeded."}
GET/api/v1/bookings/{id}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The booking ID.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/bookings/string"
{  "booking": {    "id": "cmq9book0alk34567890",    "status": "CONFIRMED",    "startAt": "2026-10-05T13:00:00.000Z",    "endAt": "2026-10-05T13:30:00.000Z",    "hostTimezone": "America/New_York",    "inviteeTimezone": "Europe/London",    "host": {      "id": "cmq1user0alk34567890",      "name": "Kevin Shah",      "email": "kevin@example.com"    },    "bookingType": {      "id": "cmq8type0alk34567890",      "title": "Intro call",      "slug": "intro-call",      "durationMin": 30,      "locationKind": "GOOGLE_MEET",      "locationValue": null    },    "inviteeName": "Dana Reed",    "inviteeEmail": "dana@example.com",    "inviteePhone": null,    "inviteeNotes": "Pricing for 40 seats.",    "guests": [],    "answers": [      {        "label": "Company size",        "value": "40"      }    ],    "contactId": "cmq2cont0alk34567891",    "leadId": null,    "taskId": "cmq7task0alk34567890",    "joinUrl": "https://meet.google.com/abc-defg-hij",    "onHostCalendar": true,    "sequence": 0,    "cancelReason": null,    "cancelledBy": null,    "cancelledAt": null,    "createdAt": "2026-09-27T14:02:00.000Z"  }}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:bookings."}
{  "error": "Booking not found."}
{  "error": "Rate limit exceeded."}
POST/api/v1/bookings/{id}/cancel

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The booking ID.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/bookings/string/cancel" \  -H "Content-Type: application/json" \  -d '{    "reason": "I\'m travelling that week. Please pick another time."  }'
{  "booking": {    "id": "cmq9book0alk34567890",    "status": "CONFIRMED",    "startAt": "2026-10-05T13:00:00.000Z",    "endAt": "2026-10-05T13:30:00.000Z",    "hostTimezone": "America/New_York",    "inviteeTimezone": "Europe/London",    "host": {      "id": "cmq1user0alk34567890",      "name": "Kevin Shah",      "email": "kevin@example.com"    },    "bookingType": {      "id": "cmq8type0alk34567890",      "title": "Intro call",      "slug": "intro-call",      "durationMin": 30,      "locationKind": "GOOGLE_MEET",      "locationValue": null    },    "inviteeName": "Dana Reed",    "inviteeEmail": "dana@example.com",    "inviteePhone": null,    "inviteeNotes": "Pricing for 40 seats.",    "guests": [],    "answers": [      {        "label": "Company size",        "value": "40"      }    ],    "contactId": "cmq2cont0alk34567891",    "leadId": null,    "taskId": "cmq7task0alk34567890",    "joinUrl": "https://meet.google.com/abc-defg-hij",    "onHostCalendar": true,    "sequence": 0,    "cancelReason": null,    "cancelledBy": null,    "cancelledAt": null,    "createdAt": "2026-09-27T14:02:00.000Z"  }}
{  "error": "Keep the reason under 500 characters."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "Booking not found."}
{  "error": "This meeting has already been cancelled."}
{  "error": "Rate limit exceeded."}
POST/api/v1/bookings/{id}/reschedule

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The booking ID.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/bookings/string/reschedule" \  -H "Content-Type: application/json" \  -d '{    "startAt": "2026-10-06T14:00:00.000Z"  }'
{  "booking": {    "id": "cmq9book0alk34567890",    "status": "CONFIRMED",    "startAt": "2026-10-05T13:00:00.000Z",    "endAt": "2026-10-05T13:30:00.000Z",    "hostTimezone": "America/New_York",    "inviteeTimezone": "Europe/London",    "host": {      "id": "cmq1user0alk34567890",      "name": "Kevin Shah",      "email": "kevin@example.com"    },    "bookingType": {      "id": "cmq8type0alk34567890",      "title": "Intro call",      "slug": "intro-call",      "durationMin": 30,      "locationKind": "GOOGLE_MEET",      "locationValue": null    },    "inviteeName": "Dana Reed",    "inviteeEmail": "dana@example.com",    "inviteePhone": null,    "inviteeNotes": "Pricing for 40 seats.",    "guests": [],    "answers": [      {        "label": "Company size",        "value": "40"      }    ],    "contactId": "cmq2cont0alk34567891",    "leadId": null,    "taskId": "cmq7task0alk34567890",    "joinUrl": "https://meet.google.com/abc-defg-hij",    "onHostCalendar": true,    "sequence": 0,    "cancelReason": null,    "cancelledBy": null,    "cancelledAt": null,    "createdAt": "2026-09-27T14:02:00.000Z"  }}
{  "error": "startAt must be an ISO 8601 datetime. Use a startAt from GET /api/v1/bookings/{id}/slots."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "Booking not found."}
{  "error": "That time has just been booked. Please pick another one."}
{  "error": "Rate limit exceeded."}
GET/api/v1/bookings/{id}/slots

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The booking ID.

Query Parameters

from?string

Start of the search window, ISO 8601 date or datetime. A bare date is midnight UTC. Defaults to now.

to?string

End of the search window (exclusive). Defaults to 7 days after from. At most 62 days after from.

timezone?string

IANA time zone for inviteeLocal, e.g. America/New_York. Defaults to UTC.

Default"UTC"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/bookings/string/slots"
{  "timezone": "America/New_York",  "slots": [    {      "startAt": "2026-10-05T13:00:00.000Z",      "endAt": "2026-10-05T13:30:00.000Z",      "hostLocal": "2026-10-05T09:00:00",      "inviteeLocal": "2026-10-05T09:00:00"    }  ]}
{  "error": "The date range cannot exceed 62 days."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:bookings."}
{  "error": "Booking not found."}
{  "error": "This meeting has already been cancelled."}
{  "error": "Rate limit exceeded."}
GET/api/v1/booking-types

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Query Parameters

hostUserId?string

Only this host's types.

includeInactive?boolean

Include paused types.

Defaultfalse

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/booking-types"
{  "bookingTypes": [    {      "id": "cmq8type0alk34567890",      "slug": "intro-call",      "title": "Intro call",      "description": null,      "host": {        "id": "cmq1user0alk34567890",        "name": "Kevin Shah",        "email": "kevin@example.com"      },      "publicUrl": "https://agentlyleads.com/book/acme/kevin/intro-call",      "active": true,      "hidden": false,      "durationMin": 30,      "slotIntervalMin": null,      "bufferBeforeMin": 0,      "bufferAfterMin": 10,      "minNoticeMin": 120,      "horizonDays": 30,      "maxPerDay": null,      "hours": [        {          "weekday": 1,          "start": "09:00",          "end": "12:00"        },        {          "weekday": 1,          "start": "13:00",          "end": "17:00"        }      ],      "dateOverrides": [],      "locationKind": "GOOGLE_MEET",      "locationValue": null,      "color": null,      "questions": [],      "allowGuests": true,      "confirmationMessage": null,      "redirectUrl": null,      "reminderMinutes": 60,      "createdAt": "2026-09-27T14:02:00.000Z",      "updatedAt": "2026-09-27T14:02:00.000Z"    }  ]}
{  "error": "includeInactive must be true or false."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:bookings."}
{  "error": "No active user with that hostUserId in this workspace."}
{  "error": "Rate limit exceeded."}
POST/api/v1/booking-types

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/booking-types" \  -H "Content-Type: application/json" \  -d '{    "hostUserId": "cmq1user0alk34567890",    "title": "Intro call",    "durationMin": 30,    "hours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ],    "locationKind": "GOOGLE_MEET",    "reminderMinutes": 60  }'
{  "bookingType": {    "id": "cmq8type0alk34567890",    "slug": "intro-call",    "title": "Intro call",    "description": null,    "host": {      "id": "cmq1user0alk34567890",      "name": "Kevin Shah",      "email": "kevin@example.com"    },    "publicUrl": "https://agentlyleads.com/book/acme/kevin/intro-call",    "active": true,    "hidden": false,    "durationMin": 30,    "slotIntervalMin": null,    "bufferBeforeMin": 0,    "bufferAfterMin": 10,    "minNoticeMin": 120,    "horizonDays": 30,    "maxPerDay": null,    "hours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ],    "dateOverrides": [],    "locationKind": "GOOGLE_MEET",    "locationValue": null,    "color": null,    "questions": [],    "allowGuests": true,    "confirmationMessage": null,    "redirectUrl": null,    "reminderMinutes": 60,    "createdAt": "2026-09-27T14:02:00.000Z",    "updatedAt": "2026-09-27T14:02:00.000Z"  }}
{  "error": "Connect your Google calendar in Scheduling → Availability to use Google Meet."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "No active user with that hostUserId in this workspace."}
{  "error": "Rate limit exceeded."}
GET/api/v1/booking-types/{id}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The meeting type ID.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/booking-types/string"
{  "bookingType": {    "id": "cmq8type0alk34567890",    "slug": "intro-call",    "title": "Intro call",    "description": null,    "host": {      "id": "cmq1user0alk34567890",      "name": "Kevin Shah",      "email": "kevin@example.com"    },    "publicUrl": "https://agentlyleads.com/book/acme/kevin/intro-call",    "active": true,    "hidden": false,    "durationMin": 30,    "slotIntervalMin": null,    "bufferBeforeMin": 0,    "bufferAfterMin": 10,    "minNoticeMin": 120,    "horizonDays": 30,    "maxPerDay": null,    "hours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ],    "dateOverrides": [],    "locationKind": "GOOGLE_MEET",    "locationValue": null,    "color": null,    "questions": [],    "allowGuests": true,    "confirmationMessage": null,    "redirectUrl": null,    "reminderMinutes": 60,    "createdAt": "2026-09-27T14:02:00.000Z",    "updatedAt": "2026-09-27T14:02:00.000Z"  }}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:bookings."}
{  "error": "Meeting type not found."}
{  "error": "Rate limit exceeded."}
PATCH/api/v1/booking-types/{id}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The meeting type ID.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Any subset of the editable fields. Unknown fields are rejected.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/api/v1/booking-types/string" \  -H "Content-Type: application/json" \  -d '{    "active": false  }'
{  "bookingType": {    "id": "cmq8type0alk34567890",    "slug": "intro-call",    "title": "Intro call",    "description": null,    "host": {      "id": "cmq1user0alk34567890",      "name": "Kevin Shah",      "email": "kevin@example.com"    },    "publicUrl": "https://agentlyleads.com/book/acme/kevin/intro-call",    "active": true,    "hidden": false,    "durationMin": 30,    "slotIntervalMin": null,    "bufferBeforeMin": 0,    "bufferAfterMin": 10,    "minNoticeMin": 120,    "horizonDays": 30,    "maxPerDay": null,    "hours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ],    "dateOverrides": [],    "locationKind": "GOOGLE_MEET",    "locationValue": null,    "color": null,    "questions": [],    "allowGuests": true,    "confirmationMessage": null,    "redirectUrl": null,    "reminderMinutes": 60,    "createdAt": "2026-09-27T14:02:00.000Z",    "updatedAt": "2026-09-27T14:02:00.000Z"  }}
{  "error": "The redirect address has to start with https://."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "Meeting type not found."}
{  "error": "Rate limit exceeded."}
DELETE/api/v1/booking-types/{id}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The meeting type ID.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/api/v1/booking-types/string"
{  "archived": true,  "id": "cmq8type0alk34567890"}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "Meeting type not found."}
{  "error": "Rate limit exceeded."}
GET/api/v1/booking-types/{id}/slots

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The meeting type ID.

Query Parameters

from?string

Start of the search window, ISO 8601 date or datetime. A bare date is midnight UTC. Defaults to now.

to?string

End of the search window (exclusive). Defaults to 7 days after from. At most 62 days after from.

timezone?string

IANA time zone for inviteeLocal, e.g. America/New_York. Defaults to UTC.

Default"UTC"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/booking-types/string/slots"
{  "timezone": "America/New_York",  "slots": [    {      "startAt": "2026-10-05T13:00:00.000Z",      "endAt": "2026-10-05T13:30:00.000Z",      "hostLocal": "2026-10-05T09:00:00",      "inviteeLocal": "2026-10-05T09:00:00"    }  ]}
{  "error": "timezone must be an IANA time zone name, like America/New_York."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:bookings."}
{  "error": "Meeting type not found."}
{  "error": "This meeting type is paused and isn't taking bookings."}
{  "error": "Rate limit exceeded."}
GET/api/v1/booking-types/{id}/hours

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The meeting type ID.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/booking-types/string/hours"
{  "availability": {    "bookingTypeId": "cmq8type0alk34567890",    "hostUserId": "cmq1user0alk34567890",    "timezone": "America/New_York",    "hours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ],    "dateOverrides": [      {        "date": "2026-12-24",        "windows": [          {            "start": "09:00",            "end": "12:00"          }        ]      },      {        "date": "2026-12-25",        "windows": []      }    ]  }}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:bookings."}
{  "error": "Meeting type not found."}
{  "error": "Rate limit exceeded."}
PUT/api/v1/booking-types/{id}/hours

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The meeting type ID.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/api/v1/booking-types/string/hours" \  -H "Content-Type: application/json" \  -d '{    "hours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ]  }'
{  "availability": {    "bookingTypeId": "cmq8type0alk34567890",    "hostUserId": "cmq1user0alk34567890",    "timezone": "America/New_York",    "hours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ],    "dateOverrides": [      {        "date": "2026-12-24",        "windows": [          {            "start": "09:00",            "end": "12:00"          }        ]      },      {        "date": "2026-12-25",        "windows": []      }    ]  }}
{  "error": "Two availability windows on the same day overlap."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "Meeting type not found."}
{  "error": "Rate limit exceeded."}
PUT/api/v1/booking-types/{id}/date-overrides/{date}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The meeting type ID.

date*string

The date, YYYY-MM-DD, in the host's timezone.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/api/v1/booking-types/string/date-overrides/string" \  -H "Content-Type: application/json" \  -d '{    "windows": [      {        "start": "09:00",        "end": "12:00"      }    ]  }'
{  "availability": {    "bookingTypeId": "cmq8type0alk34567890",    "hostUserId": "cmq1user0alk34567890",    "timezone": "America/New_York",    "hours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ],    "dateOverrides": [      {        "date": "2026-12-24",        "windows": [          {            "start": "09:00",            "end": "12:00"          }        ]      },      {        "date": "2026-12-25",        "windows": []      }    ]  }}
{  "error": "The date has to look like 2026-12-25."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "Meeting type not found."}
{  "error": "Rate limit exceeded."}
DELETE/api/v1/booking-types/{id}/date-overrides/{date}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The meeting type ID.

date*string

The date, YYYY-MM-DD, in the host's timezone.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/api/v1/booking-types/string/date-overrides/string"
{  "availability": {    "bookingTypeId": "string",    "hostUserId": "string",    "timezone": "string",    "hours": [      {        "weekday": 0,        "start": "09:00",        "end": "17:00"      }    ],    "dateOverrides": [      {        "date": "2026-12-24",        "windows": [          {            "start": "09:00",            "end": "12:00"          }        ]      }    ]  }}
{  "error": "The date has to look like 2026-12-25."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "Meeting type not found."}
{  "error": "Rate limit exceeded."}
GET/api/v1/booking-hosts

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/booking-hosts"
{  "hosts": [    {      "id": "cmq1user0alk34567890",      "name": "Kevin Shah",      "email": "kevin@example.com",      "timezone": "America/New_York",      "timezoneInherited": false,      "bookingSlug": "kevin",      "defaultHours": [        {          "weekday": 1,          "start": "09:00",          "end": "12:00"        },        {          "weekday": 1,          "start": "13:00",          "end": "17:00"        }      ]    }  ]}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:bookings."}
{  "error": "Rate limit exceeded."}
GET/api/v1/booking-hosts/{id}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The host's user ID (from GET /api/v1/booking-hosts).

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/booking-hosts/string"
{  "host": {    "id": "cmq1user0alk34567890",    "name": "Kevin Shah",    "email": "kevin@example.com",    "timezone": "America/New_York",    "timezoneInherited": false,    "bookingSlug": "kevin",    "defaultHours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ]  }}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:bookings."}
{  "error": "No active user with that hostUserId in this workspace."}
{  "error": "Rate limit exceeded."}
PATCH/api/v1/booking-hosts/{id}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The host's user ID (from GET /api/v1/booking-hosts).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/api/v1/booking-hosts/string" \  -H "Content-Type: application/json" \  -d '{    "timezone": "America/Chicago"  }'
{  "host": {    "id": "cmq1user0alk34567890",    "name": "Kevin Shah",    "email": "kevin@example.com",    "timezone": "America/New_York",    "timezoneInherited": false,    "bookingSlug": "kevin",    "defaultHours": [      {        "weekday": 1,        "start": "09:00",        "end": "12:00"      },      {        "weekday": 1,        "start": "13:00",        "end": "17:00"      }    ]  }}
{  "error": "That time zone isn't one we recognise. Use an IANA name like America/New_York."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:bookings."}
{  "error": "No active user with that hostUserId in this workspace."}
{  "error": "Rate limit exceeded."}
POST/api/v1/calendar/meetings

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/calendar/meetings" \  -H "Content-Type: application/json" \  -d '{    "title": "Quarterly review",    "date": "2026-10-05",    "startTime": "14:00",    "durationMinutes": 45,    "contactId": "cmq2cont0alk34567891"  }'
{  "timeZone": "America/New_York",  "seriesId": null,  "tasks": [    {      "id": "cmq7task0alk34567890",      "title": "Quarterly review",      "type": "MEETING",      "dueDate": "2026-10-05T18:00:00.000Z",      "endAt": "2026-10-05T18:45:00.000Z",      "allDay": false    }  ]}
{  "error": "Give the meeting a startTime before setting durationMinutes."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:calendar."}
{  "error": "Contact not found."}
{  "error": "Rate limit exceeded."}
POST/api/v1/calendar/refresh

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/calendar/refresh" \  -H "Content-Type: application/json" \  -d '{    "hostUserId": "cmq1user0alk34567890"  }'
{  "hostUserId": "cmq1user0alk34567890",  "from": "2026-09-27T14:00:00.000Z",  "to": "2026-10-27T14:00:00.000Z",  "refreshed": 1,  "failed": []}
{  "error": "The date range cannot exceed 90 days."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:calendar."}
{  "error": "No active user with that hostUserId in this workspace."}
{  "error": "Rate limit exceeded."}