Empfio Docs

Bookings API

Retrieve and manage appointment bookings.

All endpoints require a valid Bearer token. See Authentication.

Booking schema

FieldTypeDescription
idUUIDUnique booking identifier
lead_idUUIDAssociated lead
calcom_booking_idintegerCal.com booking ID (if booked via Cal.com)
calcom_booking_uidstringCal.com booking UID
event_type_idintegerCal.com event type ID
start_timedatetimeAppointment start (ISO 8601)
end_timedatetimeAppointment end (ISO 8601)
statusstringBooking status
meeting_urlstringVideo meeting URL (if applicable)
metadataobjectAdditional booking data (service, notes, etc.)
created_atdatetimeWhen the booking was created
updated_atdatetimeWhen the booking was last updated
leadobjectBrief lead info (id, name, email, phone, channel, status)

Booking statuses

StatusMeaning
confirmedAppointment is booked and confirmed
cancelledAppointment was cancelled
rescheduledAppointment was moved to a different time
no_showCustomer didn't show up
completedAppointment took place

List bookings

GET /api/v1/bookings

Query parameters:

ParameterTypeDefaultDescription
pageinteger1Page number
sizeinteger20Results per page (max: 100)
lead_idUUIDFilter by lead ID
statusstringFilter by booking status

Response:

{
  "bookings": [
    {
      "id": "770a9400-...",
      "lead_id": "550e8400-...",
      "start_time": "2026-03-20T14:00:00Z",
      "end_time": "2026-03-20T14:30:00Z",
      "status": "confirmed",
      "meeting_url": null,
      "created_at": "2026-03-07T10:00:00Z",
      "lead": {
        "id": "550e8400-...",
        "name": "Jane Smith",
        "email": "jane@example.com",
        "phone": "+49123456789",
        "channel": "whatsapp",
        "status": "booked"
      }
    }
  ],
  "total": 15,
  "page": 1,
  "size": 20
}

Get a booking

GET /api/v1/bookings/{booking_id}

Returns the full booking record including lead details and metadata.

Get available slots

Fetch open appointment slots from Cal.com for a given date range.

GET /api/v1/bookings/available-slots?start_date=2026-03-15&end_date=2026-03-22

Query parameters:

ParameterTypeRequiredDescription
start_datestringYesStart date (YYYY-MM-DD)
end_datestringYesEnd date (YYYY-MM-DD)

Response:

{
  "slots": [
    {
      "start": "2026-03-15T10:00:00Z",
      "end": "2026-03-15T10:30:00Z"
    },
    {
      "start": "2026-03-15T11:00:00Z",
      "end": "2026-03-15T11:30:00Z"
    }
  ],
  "start_date": "2026-03-15",
  "end_date": "2026-03-22",
  "event_type_id": 123456
}

Update a booking

PATCH /api/v1/bookings/{booking_id}
Content-Type: application/json

{
  "status": "cancelled"
}

Updatable fields:

FieldTypeDescription
statusstringNew status (e.g. cancelled, completed, no_show)
start_timedatetimeNew start time (for rescheduling)
end_timedatetimeNew end time
meeting_urlstringVideo meeting link
metadataobjectAdditional data

Setting status to cancelled triggers the cancellation flow.

Cancel a booking

DELETE /api/v1/bookings/{booking_id}

Cancels the booking and returns 204 No Content.

On this page