Booking Pages

A booking page publishes one mailbox’s open availability at a public URL so visitors can pick a slot and book a meeting. Booking pages are the only calendar configuration stored by shipmail; slots are always computed live from the owner’s calendar, never stored.

Last updated

The booking page object

{ "object": "booking_page", "id": "bkp_abc123", "mailbox": "hello@yourdomain.com", "slug": "intro", "url": "https://shipmail.to/book/yourdomain.com/intro", "name": "Intro call", "description": null, "duration_minutes": 30, "availability_days": [1, 2, 3, 4, 5], "window_start_minutes": 540, "window_end_minutes": 1020, "timezone": "America/New_York", "buffer_minutes": 0, "minimum_notice_minutes": 0, "max_advance_days": 30, "conferencing_provider": "zoom", "active": true, "created_at": "2026-07-07T10:00:00.000Z", "updated_at": "2026-07-07T10:00:00.000Z" }
FieldTypeDescription
idstringBooking page ID (starts with bkp_).
mailboxstringThe mailbox whose availability the page exposes.
slugstringURL slug for the public booking page.
urlstring | nullPublic booking link, served under the mailbox's domain.
namestringDisplay name.
descriptionstring | nullOptional description.
duration_minutesintegerMeeting length in minutes.
availability_daysinteger[]Weekdays offered, 0 is Sunday through 6 is Saturday.
window_start_minutesintegerStart of the daily window, minutes from midnight.
window_end_minutesintegerEnd of the daily window, minutes from midnight.
timezonestringIANA time zone the window is defined in.
buffer_minutesintegerPadding around existing events.
minimum_notice_minutesintegerMinimum notice before the first slot.
max_advance_daysintegerHow far ahead visitors can book.
conferencing_provider"zoom" | "google_meet" | nullOpt-in provider used to create a meeting for each booking.
activebooleanWhether the page accepts bookings.
created_atstringISO 8601 timestamp.
updated_atstringISO 8601 timestamp.

List and get

GET /v1/booking-pages GET /v1/booking-pages/:id

Scope: booking_pages:read. The list endpoint supports cursor and limit pagination.

Create a booking page

POST /v1/booking-pages

Scope: booking_pages:write.

{ "name": "Intro call", "mailbox": "hello@yourdomain.com", "slug": "intro", "duration_minutes": 30, "availability_days": [1, 2, 3, 4, 5], "window_start_minutes": 540, "window_end_minutes": 1020, "timezone": "America/New_York", "conferencing_provider": "zoom" }

Conferencing is opt-in per booking page. The selected provider must already be connected to the page’s mailbox, or the request is rejected. See Zoom and Google Meet.

Update or delete

PATCH /v1/booking-pages/:id DELETE /v1/booking-pages/:id

Scope: booking_pages:write. PATCH accepts any subset of the create fields. DELETE returns 204.

{ "conferencing_provider": null }

Set conferencing_provider to null to stop creating meeting links.