Build with WooCommerce Appointments
The plugin runs inside WordPress. You manage bookings in admin; you extend or connect it with PHP hooks, WooCommerce webhooks, or the REST API on a site with an active license.
Running a store? You probably do not need this section — start with Overview.
Where to add code
Merchant and setup guides sometimes show PHP filters (for example to change recurring packages or Google Calendar sync). Paste them here:
| Location | When to use |
|---|---|
Child theme functions.php | Small snippets; survives plugin updates |
| Site-specific plugin | Preferred for client sites — keeps custom code out of the theme |
Do not edit WooCommerce Appointments plugin files — updates will overwrite your changes.
After login, the full Hooks & Filters reference lists parameters and examples.
Pick your path
Customize the storefront
Embed the booking form, tweak layout or CSS, adjust emails — mostly PHP and theme work, no HTTP API.
- Shortcodes
- Appointment Form block
- Customization recipes (after login)
Connect an app or CRM
Mobile apps, kiosks, ERP sync — call the REST API and optionally subscribe to webhooks.
API base: /wp-json/wc-appointments/v2/
Change booking logic
Filter statuses, Google Calendar sync, recurring packages, cart behavior — WordPress actions and filters in PHP.
Hooks reference →Where it lives in WordPress
These are the same screens your client uses — your integration reads or writes the data behind them.
| In WordPress admin | What it maps to |
|---|---|
| Appointments → Calendar | Day/week schedule; same appointments the Calendar API returns |
| Appointments list & side panel | Create, edit, cancel — Appointments API |
| Products → Appointable | Duration, staff, recurring — Products & Slots APIs |
| WooCommerce → Settings → Appointments | Global booking options (timezone, holds, GCal) |
| WooCommerce → Settings → Advanced → REST API | Create keys for API access |
| WooCommerce → Settings → Advanced → Webhooks | Topics such as appointment.created, appointment.updated |
Permalinks must not be Plain (Settings → Permalinks). Production sites should use HTTPS.
REST API at a glance
Version 2 is the default for new work (wc-appointments/v2 in the plugin). Version 1 remains for older integrations.
| Resource | Typical use |
|---|---|
| Slots | Custom booking UI — available times for a product |
| Appointments | Create and update bookings programmatically |
| Series | Recurring packages (5.4+) — preview, book, manage occurrences |
| Calendar | Feed the same data as Appointments → Calendar |
| Staff · Products · Availabilities | Rules and catalog behind the booking form |
Example request (after you have API keys on your site):
GET https://your-site.com/wp-json/wc-appointments/v2/appointments
Every path, parameter, and JSON shape is in the license reference — not repeated here.
v2 endpoint names (public summary)
Authenticate with WooCommerce REST API keys over HTTPS (HTTP Basic Auth). Base path: /wp-json/wc-appointments/v2/.
| Endpoint | Purpose |
|---|---|
GET/POST/PATCH/DELETE /appointments | Appointment CRUD |
GET/POST/PATCH/DELETE /series | Recurring packages (5.4+) |
POST /series/preview | Package preview before checkout |
GET /calendar | Admin calendar feed |
GET /slots | Available time slots for a product |
GET/POST/PATCH/DELETE /availabilities | Availability rules |
GET /index | Precomputed availability index |
GET /staff | Staff members |
GET /products | Appointable products catalog |
GET /product-categories | Categories with appointable products |
GET /sse | Server-sent events (admin calendar) |
Legacy v1 routes remain under /wp-json/wc-appointments/v1/. WooCommerce wc/v3/orders is extended with appointment data. Request/response schemas: Developer login.
Authentication (quick start)
- On your licensed site: WooCommerce → Settings → Advanced → REST API → Add key (Read/Write as needed).
- Send requests over HTTPS with HTTP Basic Auth (
consumer_key/consumer_secret). - Namespace:
wc-appointments/v2(new work) orwc-appointments/v1(legacy).
curl -u ck_XXXX:cs_XXXX \
"https://your-site.com/wp-json/wc-appointments/v2/appointments?per_page=5"
A 200 response returns a JSON array of appointments. Error codes and schemas: Developer login → REST API.
Webhooks (WooCommerce)
Configure at WooCommerce → Settings → Advanced → Webhooks. Common topics:
| Topic | When it fires |
|---|---|
appointment.created | New appointment saved |
appointment.updated | Status, time, or staff changed |
appointment.deleted | Appointment removed |
Payload shapes and delivery retries are in the gated Webhooks reference.
What you get after login
With an active license, sign in and use Developer in the top nav for the full reference (sidebar Developers stays on this public overview).
- Complete REST API docs (v1 + v2), authentication, errors, examples
- Every hook and filter with parameters
- Webhook payloads and SSE (live calendar updates)
- Customization recipes (form tabs, CSS, Google Calendar edge cases)
Evaluating before purchase? This page is enough to see scope. You need a licensed site to call the API; purchase WooCommerce Appointments when you are ready to build.
Log in with license key →Get the plugin
Quick answers
Is there a REST API?
Yes — v2 at /wp-json/wc-appointments/v2/. Full docs require login.
Can I try it without buying?
You need the plugin on a licensed WordPress site to send requests. Use this page and Integrations to judge fit first.
I'm not a developer.
Use Overview tutorial paths and the admin guides under Setup and Management — no login required.