Title: Bookyzo – Booking &amp; Appointments
Author: Ashraful Sarkar Naiem
Published: <strong>October 1, 2026</strong>
Last modified: October 1, 2026

---

Search plugins

![](https://ps.w.org/bookyzo/assets/banner-772x250.png?rev=3723429)

![](https://ps.w.org/bookyzo/assets/icon-256x256.png?rev=3723429)

# Bookyzo – Booking & Appointments

 By [Ashraful Sarkar Naiem](https://profiles.wordpress.org/ashrafulsarkar/)

[Download](https://downloads.wordpress.org/plugin/bookyzo.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/bookyzo/#description)
 * [Reviews](https://wordpress.org/plugins/bookyzo/#reviews)
 *  [Installation](https://wordpress.org/plugins/bookyzo/#installation)
 * [Development](https://wordpress.org/plugins/bookyzo/#developers)

 [Support](https://wordpress.org/support/plugin/bookyzo/)

## Description

**Bookyzo** turns your WordPress site into a real booking system, whatever you’re
booking. Add a staff member for one-on-one appointments, a table for restaurant 
reservations, an event for ticketed occurrences, or a generic slot for anything 
else — set its availability, drop a booking form onto any page with a shortcode 
or block, and start taking bookings. No page builder plugin, no external booking
service, no WooCommerce required.

#### Why Bookyzo?

 * All four booking types — Appointment, Table, Event, Slot — in the free plugin,
   not locked behind an upsell
 * Runs entirely on your own site — your booking data stays in your own database
 * No WooCommerce dependency — works on any WordPress site
 * A real Vue-powered admin panel, not a wall of settings screens
 * No limits on bookable items, shifts or bookings — add as many staff members, 
   tables, events and slots as you need

#### Four booking types, one plugin

 * **Appointment** — one staff member, one customer per time slot (haircuts, consultations,
   tutoring)
 * **Table** — a restaurant table or venue space with a party-size capacity
 * **Event** — a specific date/time occurrence you create yourself (a class, a workshop,
   a ticketed show), sold by ticket quantity
 * **Slot** — a generic recurring time slot with room for more than one booking 
   at once (a rental, a group session, anything that doesn’t fit the other three)

Add as many bookable items as you need, set a name/price/photo, and configure the
availability that fits its type — a weekly schedule with exceptions for Appointment/
Table/Slot (its own, or your shared business hours, with as many shifts per day 
as you like, e.g. lunch and dinner), or specific dates you add yourself for Event.
Available time slots (or your entered event dates) are kept up to date automatically
in the background. For events, the booking form can optionally ask for each ticket
holder’s name when someone books several tickets.

#### Booking calendar

A day/week/month calendar in the admin panel shows every booking, color-coded by
status. Click a booking to see its details or change its status, or add a walk-in/
phone booking yourself straight from the calendar.

#### Booking list & CSV export

Filter every booking by date, bookable item or status, change status inline, and
export the filtered list to CSV whenever you need it outside WordPress.

#### Customer booking widget

Add `[bookyzo_booking]` anywhere with the shortcode, use the **Booking Form** block,
or drop it in with the Elementor widget if you build pages that way. Customers pick
a time, enter their details, get a booking confirmation, and can add it straight
to Google Calendar or download it as an .ics file — no account required.

#### Customer management

Every customer is saved automatically the first time they book — searchable by name,
email or phone under **Bookyzo  Customers**, with notes and tags you can add yourself.
Already have a customer list elsewhere? Import it from a CSV file.

#### Email notifications

Automatic emails when a booking is received, confirmed or cancelled, plus a reminder
email the day before it’s due. Every email carries the booking’s own details — number,
quantity, total and location — and a self-service link the customer can use themselves:
from it they can move their booking to another open time or cancel it, right up 
to your cancellation cutoff. Every email’s subject and body is a plain-text template
you can edit yourself, with placeholders for the customer’s name, the bookable item,
the booking time, the total and your business name.

#### Payments

Mark bookings as paid manually for cash or in-person payments, or connect a Stripe
account to let customers pay online by card when they book. An optional flat tax
rate is added to every paid booking’s total automatically.

#### Dashboard

See today’s, this week’s and this month’s booking counts at a glance when you log
in.

#### Developer friendly

Actions and filters throughout (REST controllers, pricing, rate limiting, notifications)
and a REST API under `bookyzo/v1`. See **Other Notes** for the hook list.

#### Customer accounts

Customers can optionally create an account (turn it on under **Bookyzo  Settings**)
and manage their own bookings from a `[bookyzo_account]` page — upcoming and past
bookings, rescheduling and cancelling within your cutoff. Off by default: guests
can book, and manage that booking from the link in their email, without one.

#### Growing out of the free plugin (Pro)

Everything in this plugin is complete on its own, with no limits and no locked-out
UI. Bookyzo Pro is a separate paid add-on with more features: services with per-
staff pricing and “any available staff” booking, deposits and PayPal, SMS/WhatsApp
reminders on your own schedule, seasonal and dynamic pricing, add-ons and booking
fees, custom form fields, a table floor plan, event ticket tiers with QR e-tickets
and a check-in scanner, staff calendar sync, an analytics dashboard, and WooCommerce
checkout.

### External services

Bookyzo runs on your own site and stores bookings in your own database. It connects
to these outside services only in the cases described.

#### Stripe (online card payments)

Used only if you turn on Stripe under **Bookyzo  Payments** and enter your own Stripe
API keys.

 * When a customer chooses to pay online, the booking widget loads Stripe.js from`
   https://js.stripe.com/v3/` and the card details go straight from the customer’s
   browser to Stripe. They never pass through your site.
 * Your site sends Stripe the amount, the currency, the booking’s ID and the customer’s
   email address (for Stripe’s receipt), to create the payment, and later asks Stripe
   whether that payment succeeded.
 * When you refund a booking paid by card, your site sends Stripe the payment’s 
   reference and the amount to refund.
 * Stripe calls your site’s webhook address to report payments it has completed.

Stripe is provided by Stripe, Inc.: [Services Agreement](https://stripe.com/legal/ssa),
[Privacy Policy](https://stripe.com/privacy).

#### Google Calendar (add to calendar link)

The booking confirmation screen and emails include an “Add to Google Calendar” link.
Nothing is sent to Google unless the customer clicks it; the link then opens Google
Calendar with the bookable item’s name and the booking’s time filled in.

Google Calendar is provided by Google LLC: [Terms of Service](https://policies.google.com/terms),
[Privacy Policy](https://policies.google.com/privacy).= Filters =

 * `byzo_bookable_items_offering_service` — ( int[] $bookable_item_ids, int $service_id)
   Which bookable items offer a given service, for “any available staff” resolution.
   Default `array()`.
 * `byzo_service_price` — ( float|null $price, int $service_id, int $bookable_item_id)
   Resolved price for a service booked with a specific staff member. Default `null`(
   falls back to the bookable item’s own price).
 * `byzo_deposit_amount` — ( float|null $amount, float $payment_amount, int $bookable_item_id)
   How much of a booking’s total is due online now as a deposit. Default `null` (
   pay in full).
 * `byzo_default_settings` — ( array $defaults ) Default values seeded into the 
   business-settings option on activation.
 * `byzo_rest_controllers` — ( array $controllers ) REST controller instances registered
   on `rest_api_init`.
 * `byzo_payment_gateways` — ( array $gateways ) Registered payment gateways shown
   on the Payments settings screen, keyed by gateway id. Default: Stripe only.
 * `byzo_payment_gateway_defaults` — ( array $defaults ) Default settings shape 
   for each registered gateway, keyed by gateway id. Default: Stripe only.
 * `byzo_validate_payment_gateway_settings` — ( array|WP_Error $current, string 
   $gateway_id, array $data ) Validates and merges a settings patch for a non-Stripe
   gateway. Only consulted for a gateway that `byzo_payment_gateways` actually registered.
 * `byzo_rest_public_permission` — ( bool $allowed, WP_REST_Request $request ) Permission
   check for guest-allowed REST routes.
 * `byzo_booking_rate_limit_max` / `byzo_booking_rate_limit_window` — ( int ) Per-
   IP guest booking rate limit (default 20 requests / 600 seconds) and its window
   in seconds.
 * `byzo_client_ip` — ( string $ip ) The IP address used for rate limiting.
 * `byzo_dev_server_url` — ( string $url ) Vite dev server URL used only in local
   development.
 * `byzo_unit_price` — ( float $price, int $bookable_item_id, array $slot ) Per-
   booking unit price adjustment applied right after service-price resolution and
   before tax. Default: unmodified `$price`.
 * `byzo_pdf_invoice_enabled` — ( bool $enabled ) Whether a downloadable PDF invoice
   is available from the customer dashboard. Default `false`.
 * `byzo_custom_fields_for_bookable_item` — ( array $fields, int $bookable_item_id)
   Custom form fields to render on the booking widget for a given bookable item,
   each `{ id, label, field_type, options, required }`. Default `array()`.
 * `byzo_addons_for_bookable_item` — ( array $addons, int $bookable_item_id ) Add-
   ons to render on the booking widget for a given bookable item, each `{ id, name,
   price }`. Default `array()`.
 * `byzo_resolve_addons` — ( array $resolved, int[] $addon_ids, int $bookable_item_id)
   Resolves client-submitted add-on ids into real, currently-active, correctly-scoped`{
   id, name, price }` rows at booking-creation time — an id that doesn’t resolve
   is silently dropped. Default `array()`.
 * `byzo_appearance_css_vars` — ( string $css, array $settings ) `--prop:value;`
   custom-property pairs generated from the Appearance settings. Default: the built-
   in property set, or `''` when nothing was customized.
 * `byzo_appearance_css_declarations` — ( string $css, array $settings ) `prop:value;`
   plain CSS declarations generated from the Appearance settings. Default: the built-
   in declaration set, or `''` when nothing was customized.
 * `byzo_ticket_tiers_for_bookable_item` — ( array $tiers, int $bookable_item_id)
   Ticket tiers to render on the booking widget for a given Event bookable item,
   each `{ id, name, price, capacity_remaining }`. Default `array()`.
 * `byzo_ticket_tier_price` — ( float|null $price, int $ticket_tier_id ) Resolved
   price for a specific ticket tier. Default `null` (falls back to the bookable 
   item’s own price).
 * `byzo_claim_ticket_tier` — ( bool|null $claimed, int $ticket_tier_id, int $party_size)
   Atomically claims capacity on a ticket tier at booking-creation time; `false`
   means sold out (rolls back the slot’s own capacity claim). Default `null` (no
   tier system installed, nothing to claim).
 * `byzo_qr_ticket_enabled` — ( bool $enabled ) Whether a downloadable QR e-ticket
   is available from the customer dashboard. Default `false`.

#### Actions

 * `byzo_loaded` — Fires once the plugin is fully loaded.
 * `byzo_bookable_item_created` — ( int $bookable_item_id ) After a new bookable
   item is created.
 * `byzo_bookable_item_activated` — ( int $bookable_item_id ) After a bookable item
   transitions from inactive to active.
 * `byzo_booking_created` — ( int $booking_id ) After a new booking is created.
 * `byzo_widget_rendered` — ( array $config ) Each time a booking form is rendered
   on a page, so an add-on can enqueue its own front-end scripts.
 * `byzo_booking_status_changed` — ( int $booking_id, string $new_status, string
   $old_status ) After a booking’s status changes.
 * `byzo_booking_payment_status_changed` — ( int $booking_id, string $new_status,
   string $old_status ) After a booking’s payment status changes.
 * `byzo_notification_sent` — ( string $event, int $booking_id ) After a notification
   email is sent (or attempted).
 * `byzo_notification_channels` — ( string $event, array $booking, array $placeholders)
   Fires after a notification email is sent, with the same placeholders — lets an
   add-on send the same event via another channel (e.g. SMS/WhatsApp).
 * `byzo_booking_rescheduled` — ( int $booking_id, int $new_slot_id, int $old_slot_id)
   After a booking is moved to a different slot (status itself is untouched, so 
   this is separate from `byzo_booking_status_changed`).
 * `byzo_release_ticket_tier` — ( int $ticket_tier_id, int $party_size ) Fires when
   a ticket-tiered booking is cancelled/rejected/marked no-show, so its tier’s claimed
   capacity can be released back.

## Screenshots

[⌊The booking calendar — day/week/month view, color-coded by booking status.⌉⌊The
booking calendar — day/week/month view, color-coded by booking status.⌉[

The booking calendar — day/week/month view, color-coded by booking status.

[⌊A bookable item's edit screen — details, photo, and (depending on type) weekly
availability with date exceptions, or manually-entered event dates.⌉⌊A bookable 
item's edit screen — details, photo, and (depending on type) weekly availability
with date exceptions, or manually-entered event dates.⌉[

A bookable item’s edit screen — details, photo, and (depending on type) weekly availability
with date exceptions, or manually-entered event dates.

[⌊The customer-facing booking widget — pick a bookable item and time, enter details,
confirm.⌉⌊The customer-facing booking widget — pick a bookable item and time, enter
details, confirm.⌉[

The customer-facing booking widget — pick a bookable item and time, enter details,
confirm.

[⌊The booking list with filters and CSV export.⌉⌊The booking list with filters and
CSV export.⌉[

The booking list with filters and CSV export.

[⌊The Dashboard showing today's, this week's and this month's booking counts.⌉⌊The
Dashboard showing today's, this week's and this month's booking counts.⌉[

The Dashboard showing today’s, this week’s and this month’s booking counts.

[⌊The email template editor.⌉⌊The email template editor.⌉[

The email template editor.

## Blocks

This plugin provides 1 block.

 *   Booking Form

## Installation

 1. Upload the plugin to `/wp-content/plugins/` or install it via the Plugins screen.
 2. Activate the plugin — you’ll be taken straight into a short setup wizard.
 3. Choose what you’re booking (appointment, table, event or slot), fill in your business
    details, and add your first bookable item.
 4. Add the `[bookyzo_booking]` shortcode (or the **Booking Form** block) to any page.
 5. Optionally connect Stripe under **Bookyzo  Payments** to accept card payments.

## FAQ

### Do I need WooCommerce?

No. Bookyzo has its own booking system and database tables — it doesn’t use WooCommerce
products or orders at all.

### Can customers book without creating an account?

Yes. Booking is a guest checkout by default — a customer only needs to give their
name, email and phone number.

### Can I edit the confirmation and reminder emails?

Yes, from **Bookyzo  Emails** in the admin panel. Every email is a plain-text template
with placeholders for the customer’s name, the bookable item, the booking time and
your business name.

### How do reminder emails work?

An hourly background task checks for bookings starting in roughly 24 hours and sends
a reminder — no setup needed beyond keeping the booking confirmed.

### Does this plugin hide or lock any features behind an upsell?

No. Every feature listed above is fully usable with no artificial limits, nag screens
or disabled UI.

### Does Bookyzo support anything besides one-on-one appointments?

Yes. It includes all four booking types: Appointment (one staff member, one customer),
Table (party-size reservations), Event (ticketed occurrences on dates you set yourself),
and Slot (a generic recurring slot with room for more than one booking).

### How many staff members, tables or events can I add?

As many as you need, of every type. There is no limit on bookable items, shifts 
per day or bookings.

### Where is the source code for the JavaScript?

The admin app, the booking widget and the account page are Vue apps, built with 
Vite. Their source is included with the plugin in the `src/` folder, along with `
package.json` and the Vite configuration. Run `npm install` and then `npm run build`
to rebuild the files in `assets/`.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Bookyzo – Booking & Appointments” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ Ashraful Sarkar Naiem ](https://profiles.wordpress.org/ashrafulsarkar/)
 *   [ Codeholt ](https://profiles.wordpress.org/codeholt/)

[Translate “Bookyzo – Booking & Appointments” into your language.](https://translate.wordpress.org/projects/wp-plugins/bookyzo)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/bookyzo/), check out
the [SVN repository](https://plugins.svn.wordpress.org/bookyzo/), or subscribe to
the [development log](https://plugins.trac.wordpress.org/log/bookyzo/) by [RSS](https://plugins.trac.wordpress.org/log/bookyzo/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0 – 01-10-2026

 * Initial release.

## Meta

 *  Version **1.0.0**
 *  Last updated **20 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.3 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [appointment booking](https://wordpress.org/plugins/tags/appointment-booking/)
   [booking calendar](https://wordpress.org/plugins/tags/booking-calendar/)[event booking](https://wordpress.org/plugins/tags/event-booking/)
   [stripe](https://wordpress.org/plugins/tags/stripe/)[table reservation](https://wordpress.org/plugins/tags/table-reservation/)
 *  [Advanced View](https://wordpress.org/plugins/bookyzo/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/bookyzo/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/bookyzo/reviews/)

## Contributors

 *   [ Ashraful Sarkar Naiem ](https://profiles.wordpress.org/ashrafulsarkar/)
 *   [ Codeholt ](https://profiles.wordpress.org/codeholt/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/bookyzo/)