---
title: "Create a managed booking type"
method: POST
path: "/api/bookings/types"
tags: ["Booking types"]
---

# Create a managed booking type

`POST /api/bookings/types`

## Request

- Base URL: `https://api.setluca.com`
- URL: `https://api.setluca.com/api/bookings/types`
- Auth: one of:
  - API key in cookie `luca.session_token`
  - API key in header `x-api-key`
  - HTTP bearer

Defines a bookable call: how long it runs, where it happens, and how it looks to the lead. Give it a schedule next. A booking type with no schedule offers no slots.

**API key scopes:** `bookings:write`. You also need an `Idempotency-Key` header.

## Headers

- `Luca-API-Version` '1'

## Request body

- BookingTypeCreate
  - `provider` 'manual' | 'calendly' | 'cal_com' | 'google_calendar' | 'iclosed' | 'gohighlevel', required
  - `externalId` string, nullable
  - `name` string, required
  - `active` boolean
  - `isDefault` boolean
  - `durationMinutes` integer
  - `timezone` string, required
  - `minimumNoticeMinutes` integer
  - `bookingHorizonDays` integer
  - `bufferBeforeMinutes` integer
  - `bufferAfterMinutes` integer
  - `location` union
    - object
      - `type` 'google_meet', required
    - object
      - `type` 'phone', required
      - `phoneNumber` string, required
    - object
      - `type` 'in_person', required
      - `address` string, required
    - object
      - `type` 'custom', required
      - `instructions` string, required
  - `destinationCalendarId` string, nullable
  - `guestPolicy` object
    - `allowCancellation` boolean
  - `agentPolicy` object
    - `leadCanCancel` boolean
    - `leadCanReschedule` boolean
    - `cancelMinimumNoticeMinutes` integer
    - `rescheduleMinimumNoticeMinutes` integer
    - `reminderOffsetsMinutes` integer[]
    - `bookingLinkFollowUpOffsetsMinutes` integer[]
    - `bookingLinkFollowUpMode` 'off' | 'review_first' | 'auto_send'
    - `noShowRecoveryEnabled` boolean
    - `noShowRecoveryMode` 'off' | 'review_first' | 'auto_send'
    - `noShowRecoveryOffsetsMinutes` integer[]
    - `cancellationReasonMode` 'off' | 'review_first' | 'auto_send'

## Response `200`

ok

- BookingTypeResponse
  - `bookingType` object, required
    - `provider` 'manual' | 'calendly' | 'cal_com' | 'google_calendar' | 'iclosed' | 'gohighlevel', required
    - `externalId` string, nullable
    - `name` string, required
    - `active` boolean
    - `isDefault` boolean
    - `durationMinutes` integer
    - `timezone` string, required
    - `minimumNoticeMinutes` integer
    - `bookingHorizonDays` integer
    - `bufferBeforeMinutes` integer
    - `bufferAfterMinutes` integer
    - `location` union
      - object
        - `type` 'google_meet', required
      - object
        - `type` 'phone', required
        - `phoneNumber` string, required
      - object
        - `type` 'in_person', required
        - `address` string, required
      - object
        - `type` 'custom', required
        - `instructions` string, required
    - `destinationCalendarId` string, nullable
    - `guestPolicy` object, required: Opaque JSON object
    - `agentPolicy` object, required: Opaque JSON object
    - `id` string, uuid, required
    - `coachId` string, uuid, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required

## Other responses

- `400`: bad request
- `401`: unauthorized
- `403`: forbidden
- `429`: rate limited
- `500`: internal error
- `503`: service unavailable

---

[API](https://skmtc.dev/setluca/apis/luca-api.md) · [All operations](https://skmtc.dev/setluca/apis/luca-api/llms.txt) · [OpenAPI document](https://skmtc.dev/setluca/apis/luca-api/revisions/90a200e4100b?raw)
