Bookly
Documentation Everything about running and using this install, from self-hosting to the API. The same pages live in the repository, so you can read or improve them there too.
Browse on GitHub(opens in a new tab)
Self-hosting Bookly Bookly is one container plus Postgres. Optional: a mail provider. There are no file uploads: profile photos and logos are URLs you host anywhere. Scheduling model Your calendar is governed by intent, not just busy/free: Contacts and the meeting lifecycle Bookly keeps a contact for every person who books, joins a waitlist or fills a routing form: one row per email per workspace, with a name, company, phone, tags, Calendar & conferencing integrations Bookly hosts connect their own accounts from Admin → Calendars and Admin → Conferencing.
The server admin registers the OAuth apps once and puts the keys in the Paid bookings (Stripe) Set a price on an event type (Admin → Event types → Price / Currency). With Stripe configured,
booking that event type goes: pick a slot → fill the form → Strip Host notifications and text reminders Attendees always get email: confirmation with calendar invite, 24-hour and 1-hour reminders,
cancellation. Hosts choose how they hear about things under Admin → Teams, round-robin and workflows Admin → Team lists everyone in the workspace. Owners and admins invite by email; the invitee
gets a link to /accept-invitation/<id>, creates an account (sign-up Routing forms A routing form (Admin → Routing forms) asks visitors a few questions and sends each of them to the right place. It lives at /r/<slug> on your booking host and i Embeds Add the script once, then use either pattern. Replace the host with your Bookly URL. Domains & HTTPS 1. Point your domain at the server: an A record (or CNAME) for blog.example.com.
2. Set APPURL=https://blog.example.com in .env.
3. Start with TLS: ACMEEMAIL=yo API & webhooks Base URL: https://<your-bookly>/api/v1. Machine-readable spec at /api/v1/openapi.json.
Responses are { "data": …, "meta": … } or { "error": { "code", "message" Cloud mode (multi-tenant SaaS) Set TENANCY=multi. Then: