Browse / Scheduling and staffing
Easy!Appointments
Self-hosted appointment booking for providers and services with a Builder-published REST API and OpenAPI file.
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.
- 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
- 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
- Clone
git clone https://github.com/alextselegidis/easyappointments - ImageContainer
Premium services and white-label licenses · Free closed source
- HostedOpen the hosted app
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_URLLANGUAGEDEBUG_MODEDB_HOSTDB_NAMEDB_USERNAMEDB_PASSWORDGOOGLE_SYNC_FEATUREGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRET- Config files
config-sample.phpconfig.phpdocker-compose.yml- Prompt files
- none
- Accounts you need
- Google Cloud (calendar sync, optional)
Source
- github.com/alextselegidis/easyappointments
- GPL-3.0 license
- Last commit Sep 2, 2026
- 4,351 stars
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.
Reach
Partial coverage. 7 of 9 jobs reachable through the stated interface.
| Job | Through the interface | Evidence |
|---|---|---|
| Book, move and cancel appointments | Reachable | docs/rest-api.md: GET/POST/PUT/DELETE /api/v1/appointments |
| Find open slots for a provider and service | Reachable | GET /api/v1/availabilities?providerId&serviceId&date |
| Manage customers | Reachable | Customers resource in docs/rest-api.md |
| Manage services and categories | Reachable | Services and Service Categories resources |
| Manage providers, secretaries and admins | Reachable | Providers, Secretaries and Admins resources |
| Block time off (unavailabilities) | Reachable | Unavailabilities resource |
| Read and change system settings | Reachable | Settings resource |
| Sync a provider with Google Calendar | Not reachable | OAuth consent is done by the provider in the backend UI; no sync endpoint in the API |
| Send booking notification emails | Undetermined | emails 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
| Field | Where it was seen | Confidence |
|---|---|---|
| formFactor | README: self-hosted PHP web application, Apache or Nginx, MySQL | 95% |
| executionModel | no model SDK or AI feature | 95% |
| operability | docs/rest-api.md and openapi.yml in the Builder's repo; bearer API key or basic auth | 95% |
| effort | config-sample.php constants read this run; docs/docker.md maps the same names to environment variables | 90% |
| editions | README: GPL v3 code, free for commercial use; easyappointments.org/premium lists paid services with quotes, no list prices | 80% |
| active | shortlist pushedAt 2026-09-02 | – |
| reach | 85% |
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
- github.com/alextselegidis/easyappointments sourcing:scheduling-staffing:community
- news.ycombinator.com/item?id=47780456 sourcing:scheduling-staffing:community
- github.com/alextselegidis/easyappointments/blob/master/docs/rest-api.md analysis:scheduling-staffing
- easyappointments.org/premium analysis:scheduling-staffing