Appointure is built to be extended without editing its files. It has a REST API, 29 actions and filters prefixed appointure_, and front-end templates your theme can override. The full list of hooks with their signatures is in HOOKS.md in the plugin folder. This page covers the ones most people need.
Actions and filters
| Hook | Type | When it runs |
|---|---|---|
appointure_before_booking_created | Action | Before a booking is inserted. |
appointure_appointment_created | Action | When a booking becomes confirmed, straight away for free bookings or after payment. |
appointure_appointment_status_changed | Action | On any status change, including cancellations. |
appointure_available_slots | Filter | The final list of open slots for a day. |
appointure_email_subject, appointure_email_body | Filter | Before a notification email is sent. |
appointure_payment_amount_due | Filter | The amount charged at booking. |
appointure_booking_widget_atts | Filter | The booking widget’s shortcode attributes. |
The others cover the slot engine, admin saves, texts, calendar files, REST responses, rate limits, the services grid attributes and template paths.
A common use is passing confirmed bookings to another system. Hook appointure_appointment_created rather than the status change, because it only fires once a booking is actually confirmed, after payment where there is one.
REST API
Routes live under appointure/v1:
GET /services,GET /services/{id}/availabilityandGET /services/{id}/slotsfor the services and their open times.POST /appointmentsto create a booking. It’s public, and protected by a honeypot field and a per-IP rate limit.GET /appointments/{reference}/icsfor a booking’s calendar file, plus routes to read, reschedule and cancel one booking by its reference. The customer actions check that the booking belongs to the person asking.POST /coupons/validateto check a discount code before the booking is made.POST /stripe/webhookfor Stripe’s payment events. Signatures are checked against your signing secret.
The booking widget itself uses these routes, so anything the widget can do, a custom front end can do too.
Shortcodes and block
[appointure_booking_widget]: the three-step booking flow. Withoutservice_idit reads the service from the link. More than one can sit on a page. Also available as theappointure/booking-widgetblock.[appointure_services_grid]: a card for every active service, withcolumns,titleandbooking_pageattributes.[appointure_manage_booking]: the page where customers reschedule or cancel.
Settings → Shortcodes in wp-admin has the same reference.
Overriding templates
The front-end templates can be copied into your theme and edited there, so changes survive plugin updates. The template path can also be changed with a filter. Assets only load on pages that use a shortcode or the block, so a custom template doesn’t need to enqueue anything extra.
Data and uninstalling
Appointure keeps its data in its own tables rather than in posts and post meta: services, staff and their service links, availability, appointments, payments, and the email and text logs. It upgrades its schema on update. Deleting the plugin drops those tables and its options. Deactivating it doesn’t.