Title: Flexatech Stay Suite
Author: FlexaTech
Published: <strong>September 22, 2026</strong>
Last modified: September 23, 2026

---

Search plugins

![](https://ps.w.org/flexatech-stay-suite/assets/banner-772x250.png?rev=3707545)

![](https://ps.w.org/flexatech-stay-suite/assets/icon-256x256.png?rev=3707545)

# Flexatech Stay Suite

 By [FlexaTech](https://profiles.wordpress.org/flexatech/)

[Download](https://downloads.wordpress.org/plugin/flexatech-stay-suite.1.2.0.zip)

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

 [Support](https://wordpress.org/support/plugin/flexatech-stay-suite/)

## Description

Flexatech Stay Suite is a professional room-reservation system for WordPress. It
manages hotel rooms, rate plans with date-specific price and availability overrides,
realtime availability computed straight from bookings (no stale caches), time-limited
holds that prevent overbooking, coupons, and modern payment gateways with signature-
verified, idempotent webhooks.

Every amount is stored and computed as integer cents, and the total charged is always
re-computed on the server at checkout, so a tampered client payload can never lower
the price.

📚 [**DOCUMENT**](https://flexatech-stay-suite.vercel.app/)

**Highlights**

 * Rooms as a custom post type with per-room inventory, capacity, deposit, and extras.
 * Rate plans with priority, min/max stay, and per-date-range / day-of-week price
   rules.
 * Realtime availability using half-open night semantics `[check_in, check_out)`,
   so same-day turnover (a guest checks out and another checks in the same day) 
   works correctly.
 * Overbooking-safe holds: a time-limited hold reserves inventory during checkout
   and is swept automatically when it expires (WP-Cron).
 * Coupons (percentage or fixed amount) with usage limits and expiry.
 * Payment gateways: Offline / bank transfer (built in), plus Stripe and PayPal 
   with sandbox/live modes and webhook verification. The charged amount always equals
   the server-computed total.
 * Transactional emails for booking received (customer + admin), processing, completed,
   cancelled, and payment receipts, each toggleable with a custom subject.
 * A modern React admin app for the dashboard, calendar, bookings, rate plans, coupons,
   and settings, backed by a versioned REST API (`flexatech-stay-suite/v1`).
 * WP-CLI commands and full privacy exporter/eraser integration.

### Storefront pages

Room browsing works with no setup: single room pages at `/rooms/{slug}/`, the room
archive at `/rooms/`, and room-type and amenity archives all render inside your 
active theme automatically. Your theme’s own room templates take priority, and every
plugin template can be overridden from a `flexatech-stay-suite/` folder in your 
theme. Return `false` from the `flexatech_stay_suite/frontend/use_default_templates`
filter to turn the automatic routing off.

For the cart and checkout steps, create a few pages under Pages  Add New and paste
one shortcode into each, then Publish:

 * **Cart** (required): `[flexatech_hotel_cart]`
 * **Checkout** (required): `[flexatech_hotel_checkout]`
 * **Booking Confirmation** (required): `[flexatech_hotel_thankyou]`
 * **My Bookings** (recommended): `[flexatech_hotel_account]`
 * **Book a Room** (optional landing page): `[flexatech_hotel_search]` and `[flexatech_hotel_rooms]`

The plugin finds these pages by scanning your published pages for each shortcode,
so the titles and slugs are up to you. Put each flow shortcode on its own published
page; if the same shortcode appears on more than one page, the first match is used.
The Cart, Checkout, and Booking Confirmation pages are required because the flow
redirects between them.

The three browsing shortcodes are also available as editor blocks: Room Search, 
Room List, and Single Room Booking.

Shortcode reference:

 * `[flexatech_hotel_search]`: date and guests search form. Optional `redirect="
   URL"` sends results to another page.
 * `[flexatech_hotel_rooms]`: grid of bookable rooms. Optional `per_page`, `columns`,
   and `room_type`.
 * `[flexatech_hotel_room id="123"]`: one room’s booking widget; `id` defaults to
   the current room on a room page.
 * `[flexatech_hotel_cart]`, `[flexatech_hotel_checkout]`, `[flexatech_hotel_thankyou]`,`[
   flexatech_hotel_account]`: the cart, checkout, confirmation, and account screens.

The “Storefront pages” steps above are the full setup walkthrough; the FAQ below
covers the common questions.

### External services

This plugin can connect to Stripe and PayPal to take online payments for bookings.
Both integrations are **optional**: the plugin only contacts them if the site owner
enables that gateway in Settings  Payments with their own API keys and a guest actually
selects it at checkout. The built-in Offline / bank-transfer gateway makes no external
calls.

Card numbers are never sent to or stored on your server. Stripe collects card details
in the browser (via Stripe.js) and your site only handles the resulting PaymentIntent
id and client secret.

**Stripe**

Stripe processes credit-card payments when the Stripe gateway is enabled and a guest
chooses to pay by card. Your site sends requests to the Stripe API (https://api.
stripe.com) in these cases:

 * When a guest starts a card payment at checkout, the plugin creates a PaymentIntent.
   It sends the charge amount (in the smallest currency unit), the currency, and
   the booking order id and order code as metadata.
 * When you issue a refund, the plugin sends the PaymentIntent reference and the
   refund amount.
 * Stripe also sends webhook notifications back to your site to confirm payment;
   the plugin only verifies the request signature against your webhook secret and
   does not send data to Stripe in response.

Your Stripe secret key is sent in the request authorization header so Stripe can
authenticate the call.

Stripe’s terms and privacy policy: https://stripe.com/legal/ssa and https://stripe.
com/privacy

**PayPal**

PayPal processes payments when the PayPal gateway is enabled and a guest chooses
to pay with PayPal. Depending on sandbox or live mode, your site sends requests 
to https://api-m.sandbox.paypal.com or https://api-m.paypal.com in these cases:

 * To authenticate, the plugin exchanges your PayPal client id and client secret
   for an OAuth access token.
 * When a guest starts a PayPal payment at checkout, the plugin creates a PayPal
   order, sending the amount, currency, and the booking order id and order code 
   as the order reference.
 * When you issue a refund, the plugin sends the capture reference and the refund
   amount and currency.
 * PayPal also sends webhook notifications back to your site to confirm payment;
   the plugin verifies each notification by calling PayPal’s verify-webhook-signature
   endpoint with your webhook id before acting on it.

PayPal’s user agreement and privacy policy: https://www.paypal.com/us/legalhub/useragreement-
full and https://www.paypal.com/us/legalhub/privacy-full

**Deactivation feedback**

When you deactivate the plugin from the Plugins screen, a short optional feedback
form asks why you are leaving. Whether you submit a reason or skip it, the plugin
sends the result to the FlexaTech product-intelligence service at https://product-
intelligence.flexacommerce.com so we can improve the plugin. This runs only in wp-
admin, only around deactivation (and the following reactivation), and never blocks
deactivation: if the service is unreachable, the plugin still deactivates normally.

What is sent: an anonymous per-site identifier (a random UUID generated on your 
site), the plugin slug, tier and version, the deactivation reason and any comment
you choose to provide, and basic environment information (WordPress version, PHP
version, and site locale). No email address, domain name, or raw IP address is sent.

FlexaTech service and privacy information: https://flexacommerce.com

## Blocks

This plugin provides 3 blocks.

 *   Room Search
 *   Room List
 *   Single Room Booking

## Installation

 1. Upload the `flexatech-stay-suite` folder to `/wp-content/plugins/`, or install 
    the zip via Plugins  Add New  Upload Plugin.
 2. Activate the plugin through the Plugins screen in WordPress.
 3. On first activation you land on the **Setup** screen. It shows a live completion
    checklist, guides you through each step, and creates the cart, checkout, and confirmation
    pages in one click.
 4. Open the “Flexatech Stay Suite” admin menu to configure currency, booking rules,
    taxes, payment gateways, and emails.
 5. Create a property, add rooms with inventory and capacity, and add rate plans with
    pricing rules. The Setup screen tracks each of these until you are ready to accept
    bookings.

Full documentation and a step-by-step user guide are online at https://flexatech-
stay-suite.vercel.app/

The full source code, including the admin app and its build tooling, is public on
GitHub: https://github.com/flexatech/flexatech-stay-suite

To build from source:

 1. Clone the repository: `git clone https://github.com/flexatech/flexatech-stay-suite.
    git`
 2. Build the admin dashboard bundle: `cd apps/admin && pnpm install && pnpm build`(
    writes the compiled assets to `assets/dist`).
 3. Copy the plugin folder into `/wp-content/plugins/`, or run `./release.sh` to produce
    a distributable zip in `build/`.

## FAQ

### How do I set up the booking pages on the front end?

Room browsing (single rooms and archives) is generated automatically inside your
theme, so those need no setup. For the cart and checkout steps, create a Cart, Checkout,
and Booking Confirmation page and paste `[flexatech_hotel_cart]`, `[flexatech_hotel_checkout]`,
and `[flexatech_hotel_thankyou]` into them respectively, then publish. A “My Bookings”
page with `[flexatech_hotel_account]` is recommended. The plugin discovers these
pages by their shortcode, so you can name them anything. See the “Storefront pages”
section above for the full walkthrough.

### Can a customer manipulate the price at checkout?

No. The client never sends amounts. The server re-quotes the entire cart from the
room’s rate plans and inventory at checkout, so the charged total is always the 
authoritative server figure.

### Does it prevent overbooking?

Yes. Availability is computed directly from bookings and time-limited holds, with
commit-time re-checks, so two guests cannot book the last room at the same time.

### Which payment gateways are supported?

Offline / bank transfer is built in and enabled by default. Stripe and PayPal are
included with sandbox and live modes; enter your keys in Settings  Payments to enable
them.

### Where is the source for the admin app?

The admin dashboard is a React and TypeScript app. Its readable source ships in `
apps/admin/src`, along with its build manifest (`apps/admin/package.json`, `apps/
admin/vite.config.ts`, `apps/admin/tsconfig.json`). To rebuild the compiled bundle
in `assets/dist`, run `pnpm install` then `pnpm build` inside `apps/admin`. The 
complete source and build tooling is public on GitHub: https://github.com/flexatech/
flexatech-stay-suite

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Flexatech Stay Suite” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ FlexaTech ](https://profiles.wordpress.org/flexatech/)

[Translate “Flexatech Stay Suite” into your language.](https://translate.wordpress.org/projects/wp-plugins/flexatech-stay-suite)

### Interested in development?

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

## Changelog

#### 1.2.0

 * **New:** First-run Setup dashboard. A guided screen with a real, weighted completion
   score computed from your actual data (properties, rooms, pricing, inventory, 
   storefront pages, and payment methods), a “ready to accept bookings” indicator,
   and one-click creation of the cart, checkout, and confirmation pages.
 * **New:** The first activation opens the Setup screen once (no redirect loops,
   admins only, skippable), and an incomplete-setup reminder shows on the Dashboard
   and Plugins screens until setup is ready or you dismiss it.
 * **New:** Online documentation with a user guide and developer reference at https://
   flexatech-stay-suite.vercel.app/, plus a hooks reference (docs/HOOKS.md) covering
   every action and filter.
 * **New:** Optional deactivation feedback form. When you deactivate the plugin,
   a short form asks why; the anonymous result helps us improve the plugin. It never
   blocks deactivation. See “External services” for exactly what is sent.
 * Recommend Flexa MailBridge on the Emails settings screen for reliable SMTP delivery
   of booking emails.

#### 1.1.1

 * **Security:** The admin dashboard and its read-only data routes (statistics, 
   coupons, rate plans, and room meta) now require the administrator capability.
   They were previously reachable by lower roles such as Authors. A filter is provided
   to re-map the capability.
 * Moved the top-level admin menu below the core WordPress menus so it no longer
   sits among the built-in items.
 * Passed the WordPress Plugin Check with no errors or warnings: escaped exception
   messages, hardened the direct database queries, and regenerated the translation
   template.

#### 1.1.0

 * **New:** Per-room deposit: set a fixed “amount due now” per room at checkout,
   with an automatic fallback to the global advance-payment percentage for rooms
   that have no deposit set.
 * **New:** Filter rooms by room type and amenity on the room archive and taxonomy
   pages.
 * **New:** Zero-config front-end templates: single room, room archive, and room-
   type/amenity archive pages now render automatically inside your active theme,
   with full theme-template override support and a filter to turn them off.
 * **New:** Unpaid online payments left past their hold window are now cancelled
   automatically, freeing the room, handled separately from offline holds.
 * **New:** Your configured currency symbol position (before/after the amount, with
   or without a space) is now applied everywhere on the server, including emails.
 * **New:** Coupons can be individually enabled or disabled; a disabled coupon is
   never applied when quoting or at checkout.
 * **Security:** Editing rate plans and coupons now requires the administrator capability;
   viewing remains available to lower roles. A filter is provided to re-map the 
   capability.
 * **Security:** Viewing customer bookings and changing a booking’s status now require
   the administrator capability to protect guest personal data; refunds remain admin-
   only. A filter is provided to re-map these for staff roles.
 * **Fix:** The booking confirmation (“thank you”) page no longer returns a 404 
   and now shows the correct booking summary.
 * **Fix:** Booking line items now record the correct per-night price and subtotal,
   which could previously be zero.
 * **Fix:** Room permalinks (such as /rooms/) no longer 404 on a fresh install; 
   rewrite rules are flushed on activation.
 * Disclosed Stripe and PayPal as external services in the readme and completed 
   a code-quality (phpcs) pass.

#### 1.0.0

 * Initial release: rooms, rate plans, realtime availability, overbooking-safe holds,
   coupons, offline/Stripe/PayPal gateways, transactional emails, REST API, React
   admin app, WP-CLI, and privacy tools.

## Meta

 *  Version **1.2.0**
 *  Last updated **3 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 8.2 or higher **
 * Tags
 * [availability](https://wordpress.org/plugins/tags/availability/)[booking](https://wordpress.org/plugins/tags/booking/)
   [Hotel](https://wordpress.org/plugins/tags/hotel/)[reservation](https://wordpress.org/plugins/tags/reservation/)
   [rooms](https://wordpress.org/plugins/tags/rooms/)
 *  [Advanced View](https://wordpress.org/plugins/flexatech-stay-suite/advanced/)

## Ratings

No reviews have been submitted yet.

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

[See all reviews](https://wordpress.org/support/plugin/flexatech-stay-suite/reviews/)

## Contributors

 *   [ FlexaTech ](https://profiles.wordpress.org/flexatech/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/flexatech-stay-suite/)