Uses Mews Connector API tokens — no OAuth. Each property has its own access token. Lowest-price answers are computed across every public rate plan rather than read from a single one. Mews official site ↗
Supported features
| Feature | Supported | Notes |
|---|---|---|
| Hotel availability | ✓ | Room category availability by date |
| Room types | ✓ | Cursor-paginated resource list |
| Room rates | ✓ | Per-night prices for one named rate plan |
| Rate plans | ✓ | Filtered to public + enabled; cached |
| Rate plans for a stay | ✓ | Only plans the property's restrictions leave open for the dates — closed to stay, arrival or departure, with the reason |
| Bookable services | ✓ | Mews-only; includes availability windows |
| Lowest available price | ✓ | Lowest base rate across ALL open public plans, per room category |
| Exact quote for a party | ✓ | Occupancy and age-band pricing for the guests named — the figure the booking engine shows |
| Create / modify reservation | — | Built, not yet certified |
| Guest profiles | — | Built, not yet certified |
| Payment link | — |
Setup steps
Get your Connector API access token from Mews
In Mews Commander, go to Settings → Integrations → Connector API. Create or copy the Access Token for your property. This is a per-property token, not a global key.
Mews also requires a global Client Token, which is shared across all properties under your Mews partner registration. This is set as a server-side environment variable by the Maison team — you do not enter it in the console.Optionally configure Booking Engine IDs
To enable the Lowest Available Price feature, you need four additional values from Mews:
ids— array of Booking Engine IDs (from Mews Commander → Booking Engine)primaryId— the primary Booking Engine IDclient— your client name as registered in Mewssessionid— a session identifier string provided by Mews
Once entered, Maison syncs the full booking engine configuration (enterprises, services, age categories) automatically.
Enter the credentials in the business console
Open the business console, select your client, and go to PMS Integration. Choose Mews and fill in:
accessToken— the per-property Connector API token from step 1bookingEngineConfig— optional; fill in if you want lowest-price lookups
Enable the integration
Toggle Active to on and save. If you entered Booking Engine IDs, Maison will automatically sync the booking engine configuration (enterprises, services, age categories) in the background after activation.
Available tools
12 tools are available for Mews. The concierge calls them on a guest's behalf during a conversation; which are enabled is set per property, so you only turn on what you want it to be able to do.
Enabled by default (7)
On as soon as the integration is connected, with nothing else to configure.
| Tool | What it does |
|---|---|
mews_get_age_categories | List the age categories of the hotel's bookable service — the age bands it prices by. Each entry gives an id, the property's own name for the band, its classification (Adult or Child) and the age range it covers. Use it to answer questions like 'is a 10-year-old charged as a child?', and to obtain the AgeCategoryId values that mews_price_reservation requires. |
mews_get_availability | Check how many rooms are available in each room category for a stay. Use this for any 'do you have rooms for...' question. Returns one entry per room category with a count for each NIGHT of the stay — the check-in night through the night before departure; the check-out day itself is never listed (available = bookable rooms that night; adjustment = out-of-order or blocked rooms). StartUtc and EndUtc are ISO-8601 UTC instants; a plain YYYY-MM-DD date is accepted by Mews as midnight UTC. Pass the guest's dates as YYYY-MM-DD (e.g. 2026-09-01) and do NOT invent times. The hotel's bookable service is pre-configured — never guess or invent a service ID. A category with 0 available on any stay date means NO availability for that category — that is not an error; do not retry the call. Use mews_get_resource_categories to translate category IDs into room names. |
mews_get_lowest_rates | Find the lowest available rate across ALL public rate plans for a stay. Fans out to mews_get_rate_plans_for_stay then prices every open plan concurrently via mews_get_rate_pricing and returns the per-room-category minimum total. Also reports which plans were excluded by restrictions (Excluded) and which could not be priced (ratesSkipped). Use this any time a guest asks 'what is your best rate' or 'what is the cheapest room' — it replaces a manual fan-out of mews_get_rate_plans + multiple mews_get_rate_pricing calls. The totals are the rate's base price per room category, before occupancy adjustments and included extras; once the guest has told you the party size, quote the exact figure with mews_price_reservation. If restrictionsChecked is false the restriction check could not be done — say so. StartUtc and EndUtc are ISO-8601 UTC instants; a plain YYYY-MM-DD date is accepted by Mews as midnight UTC. Pass the guest's dates as YYYY-MM-DD (e.g. 2026-09-01) and do NOT invent times. |
mews_get_rate_plans | Catalogue of the hotel's public, enabled rate plans — names and IDs only, no prices. Use this to find a specific RateId for mews_get_rate_pricing, or to tell the guest which rate plans exist. For the best available price across all plans call mews_get_lowest_rates instead. Private, disabled and deleted rates are filtered out. An empty list means no public rates are configured — not an error; do not retry. |
mews_get_rate_pricing | Get per-night prices for ONE named rate plan across a stay. Use this when you already have a specific RateId and want its exact nightly breakdown. For the best available price across ALL public plans call mews_get_lowest_rates instead. RateId is REQUIRED and must come from a mews_get_rate_plans call — never guess or invent a rate ID. Returns Dates (one YYYY-MM-DD per night of the stay, check-out day excluded), BasePrices[i] for Dates[i], and per-room-category CategoryPrices with Prices[i] and AmountPrices[i] for the same nights; sum the nightly amounts for the stay total and always state the currency. These are the category's BASE prices; AgeCategoryAdjustments lists what the property adds or deducts per person (ExtraOccupancyAdjustment, NegativeOccupancyAdjustment), so for a known party size use mews_price_reservation for the exact figure. StartUtc and EndUtc are ISO-8601 UTC instants; a plain YYYY-MM-DD date is accepted by Mews as midnight UTC. Pass the guest's dates as YYYY-MM-DD (e.g. 2026-09-01) and do NOT invent times. An empty or zero-priced result means the rate is not sellable for those dates — that is not an error; do not retry and do not fall back to inventing prices. |
mews_get_resources | List the property's physical resources (individual rooms and spaces): resource ID, name/number, parent resource, and housekeeping state. Use this to answer questions about specific rooms or the room inventory. It contains no prices and no availability — use mews_get_availability for availability and mews_get_rate_pricing for prices. Returns up to 100 resources. |
mews_price_reservation | Get the exact total price for a specific stay, including occupancy and any age-band pricing — the figure the hotel's own booking engine shows, where mews_get_rate_pricing and mews_get_lowest_rates give the base price per room. Call this once you know the dates, the room category (RequestedCategoryId from mews_get_resource_categories), the rate (RateId from mews_get_rate_plans) and the party composition. PersonCounts uses AgeCategoryId values from mews_get_age_categories — never invent one, and never substitute a plain adults/children count. Quote the returned TotalAmount.GrossValue as the total for the whole stay, with its Currency; it is NOT a per-night figure. This only prices a stay — it reserves nothing. |
Available on request (5)
Off by default. Ask Maison to enable any of these for your property — several change data in your Mews account, so they are opt-in rather than assumed.
| Tool | What it does |
|---|---|
mews_get_configuration | OPERATOR-GRADE: never use in guest conversations unless explicitly instructed. Get the enterprise configuration: property name, IANA time zone, default language, and currencies. Used for integration administration and diagnostics (e.g. verifying which property an access token belongs to). |
mews_get_rate_plans_for_stay | Public rate plans filtered for a specific stay window — returns only plans that are open (not closed to stay, arrival or departure by a restriction, allowing for its exceptions) plus an Excluded list explaining why each blocked plan cannot be booked, and CategoryExclusions for plans closed for one room category only. Use this before pricing to skip unavailable rates. For the best available price across all open plans call mews_get_lowest_rates instead. If RestrictionsChecked is false the restriction check could not be done — say so rather than promising the rate. StartUtc and EndUtc are ISO-8601 UTC instants; a plain YYYY-MM-DD date is accepted by Mews as midnight UTC. Pass the guest's dates as YYYY-MM-DD (e.g. 2026-09-01) and do NOT invent times. |
mews_get_resource_categories | List the property's room categories (room types): category ID, localized names, capacity, and extra capacity. Use this as the catalogue tool — to describe room types to the guest and to translate the category IDs returned by mews_get_availability into room names. It contains no prices. Returns up to 100 categories of the hotel's bookable service. |
mews_get_restrictions_for_stay | The hotel's booking restrictions that overlap a stay: closed-to-stay, closed-to-arrival and closed-to-departure rules, which rates and room categories they apply to, and the exceptions that lift them (minimum or maximum stay length, advance-booking window, price floor or ceiling). You rarely need this directly — mews_get_rate_plans_for_stay and mews_get_lowest_rates apply these rules for you and report why a plan is excluded. StartUtc and EndUtc are ISO-8601 UTC instants; a plain YYYY-MM-DD date is accepted by Mews as midnight UTC. Pass the guest's dates as YYYY-MM-DD (e.g. 2026-09-01) and do NOT invent times. |
mews_get_services | OPERATOR-GRADE: never use in guest conversations unless explicitly instructed. List the enterprise's services (accommodation and ancillary): service ID, localized names, active flag, and type discriminator (Bookable vs Additional). Used for integration administration — e.g. finding the bookable service ID to configure for this hotel. Returns up to 100 services. |
Not yet certified (12)
Built and working against the Mews API, but Maison is not yet certified with Mews to use them in production, so they cannot be enabled today. Listed so you can see what is coming rather than discover the gap when you ask for it.
| Tool | What it does |
|---|---|
mews_add_customer | Create a NEW guest profile in Mews. Only LastName is required; add whatever contact details the guest has shared. If a profile with the same email already exists the call FAILS (existing profiles are never overwritten from a conversation) — that is not a transient error; do not retry with the same email, use the existing profile instead. BirthDate is YYYY-MM-DD. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |
mews_add_reservation_companion | Add an existing customer profile as a companion (additional guest) on a reservation. Succeeds only while there is space for another companion (companion count below the reservation's adult + child count) — a capacity rejection is not a transient error; do not retry. Create the companion's profile first with mews_add_customer if they are not in Mews yet. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |
mews_cancel_reservation | Cancel one or more reservations. This cannot be undone — always confirm the cancellation (and any cancellation fee) with the guest before calling. Notes must state the reason for the cancellation. Set PostCancellationFee true only when the hotel's rate conditions say a fee applies; when omitted no fee is charged. Mews sends its standard cancellation email to the guest. Succeeds only for cancellable reservations — a rejection is a policy outcome, not a transient error. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |
mews_confirm_reservation | Confirm one or more reservations that are currently in the Optional state (turning a tentative booking into a confirmed one). Fails for reservations in any other state — that is a state conflict, not a transient error; check the reservation state instead of retrying. Mews sends its standard confirmation email. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |
mews_delete_reservation_companion | Remove a companion (additional guest) from a reservation. Only the link between the customer and the reservation is removed — the customer profile stays untouched in Mews. Use when a guest reports a member of their party is no longer coming. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |
mews_get_service_calendar | OPERATOR-GRADE: never use in guest conversations unless explicitly instructed. Retrieve the property-local calendar dates for which a single bookable service returns availability time units inside a date window. Returns {Dates:[YYYY-MM-DD,...]} — one entry per kept time unit; an empty array means no units in the window (success, not an error). Used by the console's Service picker to annotate each service with its bookable period. ServiceId is pre-configured — never pass a ServiceId as an LLM param. |
mews_process_reservation | OPERATOR-GRADE: never use in guest conversations unless explicitly instructed. Marks a reservation as Processed (= checked out). Succeeds only when the reservation is Started, it is the last day of the stay, and all member bills are settled. CloseBills true auto-closes closable bills; AllowOpenBalance true permits checkout with an unpaid balance and then REQUIRES Notes stating the reason. A condition failure (open balance, wrong state) is a front-desk issue — not a transient error; do not retry. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |
mews_search_customers | Search guests who are currently active in the property (companions of checked-in reservations or paymasters) by name. Use this to find a guest's customer ID for reservation or profile operations. Returns matching guest profiles (name + IDs only — contact details are withheld) plus each guest's current in-house reservation when they are staying right now. This is NOT a full guest-database search: guests without an active presence in the property are not returned — that is not an error; do not retry with the same name. |
mews_start_reservation | OPERATOR-GRADE: never use in guest conversations unless explicitly instructed. Marks a reservation as Started (= checked in). Succeeds only when all Mews starting conditions are met: the reservation is Confirmed, its start is not in the future, and an inspected room is assigned. A condition failure is a state issue for the front desk — not a transient error; do not retry. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |
mews_update_customer | Update an existing guest profile. CustomerId is REQUIRED and must come from a mews_search_customers response — never guess or invent one. Send ONLY the fields the guest asked to change; omitted fields are left intact in Mews. Changing the email fails if another profile already uses it — not a transient error; do not retry. Notes overwrites the existing notes entirely. BirthDate is YYYY-MM-DD. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |
mews_update_reservation_customer | Change the owner (main guest) of a reservation to a different customer profile. Both IDs must come from verified lookups (mews_search_customers for the customer) — never invent IDs. Use when a booking should be held under a different guest's profile. A success returns an empty result. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |
mews_update_reservation_interval | Change the start and/or end of a reservation (shorten, extend, or move the stay). Provide StartUtc and/or EndUtc — omit the one that is not changing. StartUtc and EndUtc are ISO-8601 UTC instants; a plain YYYY-MM-DD date is accepted by Mews as midnight UTC. Pass the guest's dates as YYYY-MM-DD (e.g. 2026-09-01) and do NOT invent times. ChargeCancellationFee is REQUIRED: true charges the cancellation fee for any nights removed by the change (per rate conditions), false waives it — confirm with the guest/hotel policy before choosing. A success returns an empty result; re-check the reservation to show the guest the new dates. If the call times out or fails after sending, NEVER retry automatically — the change may already have been applied in Mews; verify the current state first. |