mothermachine

Browse / Scheduling and staffing

Easy!Appointments

Self-hosted appointment booking for providers and services with a Builder-published REST API and OpenAPI file.

AdaptableOperable Business appWeb app Deterministic PHPJavaScript API License: GPL-3.0

Easy!Appointments is a PHP booking system: services, providers with working plans and booking rules, customers, a public booking page, Google Calendar sync and email notifications. The Builder documents a REST API (docs/rest-api.md, openapi.yml) covering appointments, availabilities, customers, services, providers, secretaries, admins and settings. Configuration is a single config.php; premium services and white-label licenses are sold separately.

Use it when
  • my clinic or salon needs a booking page per provider with working hours and services, on ordinary PHP hosting
  • I want my agent to check availability and book clients into staff calendars through a plain REST API
Gotchas
  • GPL-3.0 copyleft; removing branding for resale is a separate white-label license on easyappointments.org/premium
  • API auth is admin basic auth or an API key set in Settings; the docs insist on HTTPS
  • Named repeatedly as the fallback in the April 2026 'Cal.com is going closed source' thread, so expect issue traffic from migrating users

Last activity Sep 2, 2026. Fit: adaptable 2, operable 3.

Editions

Free · Free open source

  • Clonegit clone https://github.com/alextselegidis/easyappointments
  • ImageContainer

Premium services and white-label licenses · Free closed source

For agents: JSON · Markdown

Adaptable: what is yours to change

Make it yours

Config only13 things to edit

Rename config-sample.php to config.php and set BASE_URL, LANGUAGE, DB_HOST, DB_NAME, DB_USERNAME and DB_PASSWORD; enable GOOGLE_SYNC_FEATURE with GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET if providers sync calendars. The Docker image takes the same names as environment variables (docs/docker.md). Services, providers, working plans, booking rules and email settings are set in the backend after the setup wizard.

Env vars
BASE_URL LANGUAGE DEBUG_MODE DB_HOST DB_NAME DB_USERNAME DB_PASSWORD GOOGLE_SYNC_FEATURE GOOGLE_CLIENT_ID GOOGLE_CLIENT_SECRET
Config files
config-sample.php config.php docker-compose.yml
Prompt files
none
Accounts you need
Google Cloud (calendar sync, optional)

Source

Operable: what an agent can drive

Interface

OfficialAPIpublished by the builderremote or local

How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.

Docs
github.com/alextselegidis/easyappointments/blob/master/docs/rest-api.md

Reach

Partial coverage. 7 of 9 jobs reachable through the stated interface.

JobThrough the interfaceEvidence
Book, move and cancel appointmentsReachabledocs/rest-api.md: GET/POST/PUT/DELETE /api/v1/appointments
Find open slots for a provider and serviceReachableGET /api/v1/availabilities?providerId&serviceId&date
Manage customersReachableCustomers resource in docs/rest-api.md
Manage services and categoriesReachableServices and Service Categories resources
Manage providers, secretaries and adminsReachableProviders, Secretaries and Admins resources
Block time off (unavailabilities)ReachableUnavailabilities resource
Read and change system settingsReachableSettings resource
Sync a provider with Google CalendarNot reachableOAuth consent is done by the provider in the backend UI; no sync endpoint in the API
Send booking notification emailsUndeterminedemails are sent by the app on booking events; not stated whether API-created appointments trigger them

Code stack

Languages
PHPJavaScript
Frameworks
CodeIgniter
Package manager
composer
Database
MySQL
Hosting target
apachenginxdocker
Built
Human-written (recorded, never ranked)

Evidence and confidence

FieldWhere it was seenConfidence
formFactorREADME: self-hosted PHP web application, Apache or Nginx, MySQL95%
executionModelno model SDK or AI feature95%
operabilitydocs/rest-api.md and openapi.yml in the Builder's repo; bearer API key or basic auth95%
effortconfig-sample.php constants read this run; docs/docker.md maps the same names to environment variables90%
editionsREADME: GPL v3 code, free for commercial use; easyappointments.org/premium lists paid services with quotes, no list prices80%
activeshortlist pushedAt 2026-09-02–
reach85%

Open questions

  • Do API-created appointments trigger customer and provider notification emails?
  • Does the providers resource expose the working plan and booking rules for editing?

Sources