Changelog

2026-10-10

Developer docs, and slot dates that mean what they say

docs.clndr.pro is live. Guides for the embed, @clndr-pro/react, @clndr-pro/sdk and the REST API, six tutorials (shadcn widgets, server actions, approvals, syncing bookings), an OpenAPI 3.1 spec at /openapi.json, and prompts you can paste into Claude Code. Every page is also Markdown at its own URL plus .md, indexed at /llms.txt, and there's an MCP server and a Claude Code skill: see Docs for AI tools.

API: GET /booking-pages/{slug}/slots

  • date=YYYY-MM-DD now means that calendar day in the host's timezone. It used to be read as UTC midnight, so hosts west of UTC got the previous day's slots. Full ISO timestamps still work as before.
  • Slots that have already started are no longer returned, and days past the page's max_days_ahead return an empty list.
  • An unparseable date returns 400 instead of 500.

API: POST /bookings

  • Bookings made with a publishable key must match a slot the slots endpoint offers right now: future, inside the host's hours, within max_days_ahead. Anything else is a 409. Secret keys can still book any time that doesn't overlap another booking.
  • A taken slot is now 409 (was 400), the guest-email limit 429 (was 400), and failures on our side 500 (were 400).
  • Bad emails, unparseable or reversed timestamps, and a responses that isn't an array get a 400 that names the field.

Slots. A busy block that started inside a slot and ended with it (slot 9:00–10:00, meeting 9:30–10:00) was offered as free. Fixed for the API, the hosted page and the embed. Slots now come back sorted by start.

Embed. https://www.clndr.pro/embed.js loads on third-party pages. It used to redirect to the sign-in page, so Clndr.inline, Clndr.modal and Clndr.floatingButton never ran.

Dashboard. The API Keys page now names the real packages (@clndr-pro/sdk and @clndr-pro/react, not @clndr/*), shows an iframe embed snippet, tells you which env var each key belongs in, and links here.