Booking Pages
Booking pages (bkp_ prefix) are public, agent-provisioned scheduling links. An agent
creates a page bound to a calendar; a human opens the hosted booking_url, picks a
slot, and Chronary creates a confirmed event on the calendar and fires event.created
with a booking_page_id correlation field. See the Booking Pages guide
for a walkthrough.
Create a booking page
Section titled “Create a booking page”POST /v1/booking-pagesRequest body
Section titled “Request body”| Field | Type | Required | Description |
|---|---|---|---|
calendar_id | string | yes | Calendar a booking resolves to. |
title | string | yes | Meeting title shown on the page. |
description | string | no | Description shown to the booker. |
duration_minutes | integer | no | Slot length (5–480, default 30). |
buffer_minutes | integer | no | Padding before/after existing events (0–120, default 0). |
window_days | integer | no | How far ahead bookings are allowed (1–365, default 14). |
min_notice_minutes | integer | no | Minimum lead time before a bookable slot (default 0). |
timezone | string | no | IANA timezone for display + working hours (default UTC). |
availability_constraints | object | null | no | Weekly working hours, e.g. {"mon":{"start":"09:00","end":"17:00"}}. null = any time in the window. |
active | boolean | no | Whether the page accepts bookings (default true). |
{ "calendar_id": "cal_01H9X4M2P5R8T6V0", "title": "Intro call", "duration_minutes": 30, "window_days": 14}Response 201: a BookingPage object including a slug and booking_url
(https://api.chronary.ai/book/<slug>).
List booking pages
Section titled “List booking pages”GET /v1/booking-pages?limit=50&offset=0Response 200: { data: BookingPage[], total, limit, offset }. Agent-scoped keys see
only pages on their own agent’s calendars.
Get / update / delete
Section titled “Get / update / delete”GET /v1/booking-pages/:idPATCH /v1/booking-pages/:idDELETE /v1/booking-pages/:idPATCH accepts any of the create fields except calendar_id. DELETE soft-deletes the
page (its hosted URL stops resolving; already-booked events are unaffected) and returns
204.
Public endpoints (no authentication)
Section titled “Public endpoints (no authentication)”The slug is the credential — these endpoints take no API key.
List available slots
Section titled “List available slots”GET /book/:slug/slotsResponse 200:
{ "booking_page": { "slug": "<slug>", "title": "Intro call", "description": null, "duration_minutes": 30, "timezone": "UTC" }, "slots": [{ "start": "2026-07-15T16:00:00.000Z", "end": "2026-07-15T16:30:00.000Z" }]}Submit a booking
Section titled “Submit a booking”POST /book/:slugAccepts JSON (returns JSON) or an HTML form (returns an HTML confirmation).
{ "name": "Ada Lovelace", "email": "[email protected]", "notes": "Looking forward!", "start": "2026-07-15T16:00:00.000Z" }Response 201: { "booking_page_id": "bkp_...", "event": { "id": "evt_...", "status": "confirmed" } }.
The start is re-validated against live availability; a slot taken since the page loaded
returns 409.
Hosted page
Section titled “Hosted page”GET /book/:slugReturns the server-rendered HTML scheduling page (text/html). Pass ?slot=<ISO> to
render the confirmation form for a chosen slot.
Plan limits
Section titled “Plan limits”Booking pages are available on every plan — Free: 1, Pro: 25, Custom: unlimited. Each booking creates an event, so booking volume counts toward the monthly events quota.