---
title: "Submit a booking"
method: POST
path: "/book/{slug}"
tags: ["Booking Pages"]
---

# Submit a booking

`POST /book/{slug}`

## Request

- Base URL: `https://api.chronary.ai`
- URL: `https://api.chronary.ai/book/{slug}`
- Auth: none required

Public booking submission. No authentication — the slug is the credential. Accepts JSON (returns JSON) or an HTML form (returns an HTML confirmation). Re-validates the chosen slot against live availability, creates a confirmed event, and fires an `event.created` webhook with `booking_page_id`.

## Path parameters

- `slug` string, required: Public booking page slug

## Request body

- SubmitBooking
  - `name` string, required
  - `email` string, email, required
  - `notes` string
  - `start` string, date-time, required

## Response `201`

Booking confirmed

- BookingSubmissionResult
  - `booking_page_id` string, required
  - `event` object, required
    - `id` string, required
    - `title` string, required
    - `start_time` string, date-time, required
    - `end_time` string, date-time, required
    - `status` string, required

## Other responses

- `400`: Validation error — invalid request body or query parameters
- `404`: Resource not found
- `409`: The slot is no longer available or was just taken
- `429`: Rate limited — 10 requests per second per key exceeded
- `503`: The page is temporarily not accepting bookings

---

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