---
title: "Create a booking page"
method: POST
path: "/booking-pages"
tags: ["Booking Pages"]
---

# Create a booking page

`POST /booking-pages`

## Request

- Base URL: `https://shipmail.to/api/v1`
- URL: `https://shipmail.to/api/v1/booking-pages`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://shipmail.to/api/auth/oauth2/authorize`, token URL `https://shipmail.to/api/auth/oauth2/token`)

## Headers

- `X-Shipmail-Organization` string

## Request body

- CreateBookingPageRequest
  - `name` string, required
  - `mailbox` string, email, required: The mailbox whose availability the page exposes.
  - `slug` string, required: URL slug, lowercase letters, numbers, and hyphens.
  - `duration_minutes` integer, required
  - `availability_days` integer[], required: Weekdays offered, 0=Sunday .. 6=Saturday.
  - `window_start_minutes` integer, required
  - `window_end_minutes` integer, required
  - `timezone` string, required
  - `description` string, nullable
  - `buffer_minutes` integer
  - `minimum_notice_minutes` integer
  - `max_advance_days` integer
  - `conferencing_provider` 'zoom' | 'google_meet', nullable: Opt-in provider used to create a meeting for each booking. Null or omission means no meeting link. The provider must already be connected to the page's mailbox, or the request is rejected.
  - `active` boolean

## Response `201`

Booking page created.

- BookingPage
  - `object` 'booking_page', required
  - `id` string, required
  - `mailbox` string, email, required: The mailbox whose availability the page exposes.
  - `slug` string, required
  - `url` string, nullable, required: Public booking URL.
  - `name` string, required
  - `description` string, nullable, required
  - `duration_minutes` integer, required
  - `availability_days` integer[], required: Weekdays offered, 0=Sunday .. 6=Saturday.
  - `window_start_minutes` integer, required: Start of the daily window, minutes from midnight.
  - `window_end_minutes` integer, required: End of the daily window, minutes from midnight.
  - `timezone` string, required
  - `buffer_minutes` integer, required
  - `minimum_notice_minutes` integer, required
  - `max_advance_days` integer, required
  - `conferencing_provider` 'zoom' | 'google_meet', nullable, required: Opt-in provider used to create a meeting for each booking. Null means no meeting link. The provider must already be connected to the page's mailbox, or the request is rejected.
  - `active` boolean, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `404`: Resource not found.
- `409`: Resource conflict.
- `422`: Validation failed.
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/shipmail/apis/shipmail-api.md) · [All operations](https://skmtc.dev/shipmail/apis/shipmail-api/llms.txt) · [OpenAPI document](https://skmtc.dev/shipmail/apis/shipmail-api/revisions/2c23e59d7e30?raw)
