Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions connector-api/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
* [Use cases](use-cases/README.md)
* ['How to' use cases](use-cases/how-to.md)
* [Accounting](use-cases/accounting.md)
* [Allowances](use-cases/allowances.md)
* [Customer loyalty](use-cases/loyalty.md)
* [Customer management](use-cases/customer-management.md)
* [Customer messaging](use-cases/messaging.md)
Expand Down
1 change: 1 addition & 0 deletions connector-api/use-cases/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Even if you are integrating a different type of system, it serves as a good star
## Business use cases

* [Accounting](accounting.md)
* [Allowances](allowances.md)
* [Customer loyalty](loyalty.md)
* [Customer management](customer-management.md)
* [Events](events.md)
Expand Down
177 changes: 177 additions & 0 deletions connector-api/use-cases/allowances.md
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: beside Copilot comments, I'd suggest reordering the individual use case sections in the order of understand -> read -> interpret -> post -> test. The assumption is that users will most likely run into Allowance when fetching data, while posting the allowances & co. will affect only a subset of those users.

Here's my proposal for reordering the sections:

  1. Overview

understand:
2. Key concepts

read:
3. Retrieving allowance-related order items
4. Identifying allowance products (read)

interpret:
5. Working with allowance discounts (interpret)
6. Working with breakage and profits (interpret)

post:
7. Posting charges against an allowance
8. Partial consumption /edge case/
9. Charges that do not qualify /edge case/

test:
10. Testing your integration

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
# Allowances

## Overview

An `Allowance` is a packaged spending benefit that a `Property` attaches to a `Rate`, giving guests a defined amount they can redeem against specified on-property services — for example, food & beverage, spa, or minibar charges. Rather than discounting the room `Rate`, the `Property` adds value while protecting its Average Daily Rate (ADR).

From an accounting perspective, the allowance represents a liability the `Property` assumes at activation: the `Property` has committed to absorbing qualifying charges on the guest's behalf, up to the specified amount. When an allowance is activated for a `Reservation`, the system posts an allowance product order item (a `ProductOrder` with `ProductType = Allowance`) to the guest's `Bill`. When a qualifying charge is subsequently posted — one whose `Accounting Category` matches the allowance's permitted consumption categories — the system automatically creates an `AllowanceDiscount` order item that offsets the charge up to the remaining allowance balance.

Any unspent allowance is retained by the `Property` as additional revenue, which is known as `Breakage`.

Comment on lines +5 to +10
Copy link

Copilot AI Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This page uses inline code formatting for domain concepts (e.g., Property, Rate, Reservation, Bill, Breakage). In other Connector API use-case pages, backticks are generally reserved for API field names / enum values (e.g., AccountingEditableHistoryInterval in connector-api/use-cases/accounting.md:13), while domain terms are plain text. Consider removing backticks from non-API terms to match the existing documentation style and improve readability.

Copilot uses AI. Check for mistakes.
Integrations — such as point-of-sale (POS) systems, accounting systems, and kiosk or self-service applications — can use the **Mews Connector API** to:

* post charges that are automatically offset against a guest's allowance
* retrieve allowance-related order items for billing, reconciliation, and balance reporting

## Key concepts

There are several types of order item specific to allowances. Understanding these is essential for working with allowance data through the API.

### Allowance-related order item types

| Order item type | What it represents |
| --- | --- |
| `ProductOrder` (with `ProductType = Allowance`) | The allowance product — the liability posted to the guest's bill when the allowance is activated. |
| `AllowanceDiscount` | A discount automatically applied to a qualifying charge, offsetting the charge up to the remaining allowance balance. |
| `AllowanceBreakage` | Unspent allowance retained by the `Property` as revenue at checkout. See `Breakage`. |
| `AllowanceContraBreakage` | The accounting contra entry for breakage, ensuring double-entry accounting integrity. |

### Automatic discounting

When a charge is posted to a guest who has an active allowance, and the charge's accounting category matches the allowance's permitted consumption categories, the system automatically creates an `AllowanceDiscount` item to offset the charge.

{% hint style="info" %}
No additional API call is needed to trigger the discount.
{% endhint %}

## Retrieving allowance-related order items

Use [`Get all order items`](../operations/orderitems.md#get-all-order-items) to retrieve order items related to allowances.

You can filter:

* by reservation using `ServiceOrderIds`
* by bill using `BillIds`
* by time period using, for example, `CreatedUtc`, `UpdatedUtc`, or `ClosedUtc`
* by item type using `Types`

### "How to" use cases (retrieving items)

| "How to" use case | API operations |
| --- | --- |
| How to get all order items for a reservation (including allowance items) | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `ServiceOrderIds`) |
| How to get allowance discount items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` filter with `AllowanceDiscount`) |
| How to get breakage items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` filter with `AllowanceBreakage`) |
Copy link

Copilot AI Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This row suggests filtering Types with only AllowanceBreakage, but breakage and contra-breakage occur in pairs. For reconciliation you likely need both AllowanceBreakage and AllowanceContraBreakage (and/or explicitly state that the contra item must also be fetched separately).

Suggested change
| How to get breakage items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` filter with `AllowanceBreakage`) |
| How to get breakage items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` filter with `AllowanceBreakage` and `AllowanceContraBreakage`) |

Copilot uses AI. Check for mistakes.
| How to get all allowance-related items on a bill | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `BillIds`) |
| How to get allowance items over a period | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `ClosedUtc` or `ConsumedUtc`) |

## Identifying allowance products

To identify whether an order item is an allowance product (as opposed to a regular product), check the item's `Data` field.

An order item with:

* `Data.Discriminator` set to `Product`, and
* `Data.Product.ProductType` set to `Allowance`

is an **allowance product** — the allowance amount itself, as opposed to a charge or discount.

### "How to" use cases (identifying products)

| "How to" use case | API operations |
| --- | --- |
| How to identify allowance product items among order items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (check `Data.Product.ProductType = Allowance`) |

## Working with allowance discounts

When you retrieve order items of type `AllowanceDiscount`, the item's `Data` field contains additional information that links the discount back to both:

* the original charge
* the allowance product that funded it

Specifically, an [`Order item`](../operations/orderitems.md#order-item) with `Data.Discriminator` set to `AllowanceDiscount` will have:

* `DiscountedOrderItemId` — the unique identifier of the original charge item that was discounted.
* `AllowanceProductOrderItemId` — the unique identifier of the allowance product order item which consumed the item.

You can use [`Get all order items`](../operations/orderitems.md#get-all-order-items) with the `OrderItemIds` filter to fetch the details of either:

* the original charge, or
* the allowance product.

### "How to" use cases (discount links)

| "How to" use case | API operations |
| --- | --- |
| How to find the original charge for an allowance discount | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `OrderItemIds` with `DiscountedOrderItemId`) |
| How to find which allowance funded a discount | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `OrderItemIds` with `AllowanceProductOrderItemId`) |

Comment thread
DenysShylov marked this conversation as resolved.
{% hint style="info" %}
Discount amounts are negative. An `AllowanceDiscount` order item carries a negative `Amount`, which offsets the positive amount of the original charge on the guest's bill.
{% endhint %}

## Working with breakage and profits

When a guest checks out or an allowance expires with unspent allowance remaining, the system generates breakage items. These represent the `Property`'s retained revenue from unused allowance.

An [`Order item`](../operations/orderitems.md#order-item) with `Data.Discriminator` set to `AllowanceProfits` will have:

* `AllowanceProductOrderItemId` — the unique identifier of the allowance product whose amount was not fully consumed.
* `AllowanceProfitType` — the type of profit entry, which can be one of:
* `AllowanceBreakage` — the profit from unspent allowance amount.
* `AllowanceContraBreakage` — the accounting balance entry for the breakage.
* `AllowanceLoss` — the loss from the allowance product.
* `AllowanceContraLoss` — the accounting balance entry for the loss.

### "How to" use cases (breakage and profits)

| "How to" use case | API operations |
| --- | --- |
| How to get breakage items for reconciliation | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` with `AllowanceBreakage`) |
| How to find which allowance generated a breakage item | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `OrderItemIds` with `AllowanceProductOrderItemId` from the breakage item's `Data`) |

Comment thread
DenysShylov marked this conversation as resolved.
{% hint style="info" %}
Breakage and contra-breakage always occur in pairs. For every `AllowanceBreakage` item, there is a corresponding `AllowanceContraBreakage` item to maintain double-entry accounting balance. Accounting integrations should expect and reconcile both.
{% endhint %}
Comment on lines +118 to +125
Copy link

Copilot AI Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For “breakage items for reconciliation”, the filter guidance uses only Types = AllowanceBreakage. Since the docs below state breakage and contra-breakage always occur in pairs, this should include AllowanceContraBreakage as well (or clarify how to retrieve/reconcile the contra entry).

Copilot uses AI. Check for mistakes.

## Posting charges against an allowance

External systems such as POS integrations can post charges to a guest's profile using [`Add order`](../operations/orders.md#add-order).

If the guest has an active allowance and the charge falls within the allowance's permitted consumption categories (matched by `AccountingCategoryId`), the system will automatically generate an `AllowanceDiscount` order item that offsets the charge — up to the remaining allowance balance.

Both `ProductOrders` (for products already configured in Mews) and `Items` (for custom items not configured in Mews) are supported.

In both cases, the `AccountingCategoryId` on the item determines whether the charge qualifies for allowance discounting.

### Linking orders to reservations

Specify parameter `LinkedReservationId` when using [`Add order`](../operations/orders.md#add-order) to link the order to the guest's reservation.

This is especially important for allowances because it ensures the charge and the resulting allowance discount are associated with the correct reservation and its billing automation rules.

### "How to" use cases (posting charges)

| "How to" use case | API operations |
| --- | --- |
| How to post a charge that triggers an allowance discount | [`Add order`](../operations/orders.md#add-order) |
| How to post a custom item against an allowance | [`Add order`](../operations/orders.md#add-order) (use `Items` with `AccountingCategoryId`) |
| How to post an existing Mews product against an allowance | [`Add order`](../operations/orders.md#add-order) (use `ProductOrders`) |

## Partial consumption

If the charge amount exceeds the remaining allowance balance, the discount is applied only up to the remaining balance. The guest is responsible for the remainder.

For example, if a guest has €30 remaining on their F&B allowance and a €45 dinner charge is posted, an `AllowanceDiscount` of €30 is created and the guest owes €15.

## Charges that do not qualify

If the posted item's accounting category is not in the allowance's permitted consumption list, no discount is generated.

The charge is posted normally to the guest's bill.

Comment thread
DenysShylov marked this conversation as resolved.
## Testing your integration

Ensure you follow the general [`Usage guidelines`](../guidelines/README.md) for testing integrations.

When testing an integration that works with allowances, verify the following scenarios:

* Post a charge with an accounting category that matches the allowance's permitted consumption — confirm an `AllowanceDiscount` item is automatically created.
* Post a charge with an accounting category that does not match — confirm no discount is created.
* Post a charge that exceeds the remaining allowance balance — confirm the discount is capped at the remaining balance.
* Post a charge of amount 0 — confirm no discount is created.
* Retrieve order items for a reservation and confirm you can identify all allowance-related item types (`AllowanceDiscount`, `AllowanceBreakage`, `AllowanceContraBreakage`).
* Confirm that breakage items are created after checkout when allowance amount remains unspent.
* Reconcile the sum of allowance product amount, discount amounts, and breakage amounts — they should balance to zero.

To cross-check allowance financial data, you can use the [Accounting Report](https://help.mews.com/s/article/accounting-report?language=en_US) and the [Bills and Invoices Report](https://help.mews.com/s/article/bills-and-invoices-report?language=en_US) in **Mews Operations**.
19 changes: 18 additions & 1 deletion connector-api/use-cases/how-to.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,23 @@ This page summarises all of our 'how to' use cases, together with the main use c
| How to record an alternative external payment | [Add alternative payment](../operations/payments.md#add-alternative-payment) | [Kiosk](kiosk.md) |
| How to post end-of-day accounting items | [Add outlet bill](../operations/outletbills.md#add-outlet-bills) | [Point of sale](point-of-sale.md) |

## Allowances

| <div style="width:350px">'How to' use case</div> | <div style="width:200px">API Operations</div> | <div style="width:150px">Use cases</div> |
| :------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- |
| How to get all order items for a reservation (including allowance items) | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `ServiceOrderIds`) | [Allowances](allowances.md) |
| How to get allowance discount items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` with `AllowanceDiscount`) | [Allowances](allowances.md) |
| How to get breakage items for reconciliation | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` with `AllowanceBreakage`) | [Allowances](allowances.md) |
| How to get all allowance-related items on a bill | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `BillIds`) | [Allowances](allowances.md) |
| How to get allowance items over a period | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `ClosedUtc` or `ConsumedUtc`) | [Allowances](allowances.md) |
| How to identify allowance product items among order items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (check `Data.Product.ProductType = Allowance`) | [Allowances](allowances.md) |
| How to find the original charge for an allowance discount | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `OrderItemIds` with `DiscountedOrderItemId`) | [Allowances](allowances.md) |
Comment on lines +50 to +58
Copy link

Copilot AI Apr 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This “breakage items for reconciliation” entry suggests filtering Types with only AllowanceBreakage, but reconciliation typically needs the paired AllowanceContraBreakage item too. Consider including both types (or clarifying that both should be retrieved/reconciled).

Suggested change
| <div style="width:350px">'How to' use case</div> | <div style="width:200px">API Operations</div> | <div style="width:150px">Use cases</div> |
| :------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- |
| How to get all order items for a reservation (including allowance items) | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `ServiceOrderIds`) | [Allowances](allowances.md) |
| How to get allowance discount items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` with `AllowanceDiscount`) | [Allowances](allowances.md) |
| How to get breakage items for reconciliation | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` with `AllowanceBreakage`) | [Allowances](allowances.md) |
| How to get all allowance-related items on a bill | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `BillIds`) | [Allowances](allowances.md) |
| How to get allowance items over a period | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `ClosedUtc` or `ConsumedUtc`) | [Allowances](allowances.md) |
| How to identify allowance product items among order items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (check `Data.Product.ProductType = Allowance`) | [Allowances](allowances.md) |
| How to find the original charge for an allowance discount | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `OrderItemIds` with `DiscountedOrderItemId`) | [Allowances](allowances.md) |
| <div style="width:350px">'How to' use case</div> | <div style="width:200px">API Operations</div> | <div style="width:150px">Use cases</div> |
| :------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- |
| How to get all order items for a reservation (including allowance items) | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `ServiceOrderIds`) | [Allowances](allowances.md) |
| How to get allowance discount items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` with `AllowanceDiscount`) | [Allowances](allowances.md) |
| How to get breakage items for reconciliation | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `Types` with `AllowanceBreakage` and `AllowanceContraBreakage`) | [Allowances](allowances.md) |
| How to get all allowance-related items on a bill | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `BillIds`) | [Allowances](allowances.md) |
| How to get allowance items over a period | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `ClosedUtc` or `ConsumedUtc`) | [Allowances](allowances.md) |
| How to identify allowance product items among order items | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (check `Data.Product.ProductType = Allowance`) | [Allowances](allowances.md) |
| How to find the original charge for an allowance discount | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `OrderItemIds` with `DiscountedOrderItemId`) | [Allowances](allowances.md) |

Copilot uses AI. Check for mistakes.
| How to find which allowance funded a discount | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `OrderItemIds` with `AllowanceProductOrderItemId`) | [Allowances](allowances.md) |
| How to find which allowance generated a breakage item | [`Get all order items`](../operations/orderitems.md#get-all-order-items) (use `OrderItemIds` with `AllowanceProductOrderItemId` from breakage item's `Data`) | [Allowances](allowances.md) |
| How to post a charge that triggers an allowance discount | [`Add order`](../operations/orders.md#add-order) | [Allowances](allowances.md) |
| How to post a custom item against an allowance | [`Add order`](../operations/orders.md#add-order) (use `Items` with `AccountingCategoryId`) | [Allowances](allowances.md) |
| How to post an existing Mews product against an allowance | [`Add order`](../operations/orders.md#add-order) (use `ProductOrders`) | [Allowances](allowances.md) |

## Enterprises & Resources

| <div style="width:350px">'How to' use case</div> | <div style="width:200px">API Operations</div> | <div style="width:150px">Use cases</div> |
Expand Down Expand Up @@ -141,7 +158,7 @@ This page summarises all of our 'how to' use cases, together with the main use c
| How to add a product order item to a customer profile | [Add order](../operations/orders.md#add-order) | [Events](events.md) |
| How to add a product order to a guest profile | [Add order](../operations/orders.md#add-order) | [Upsell](upsell.md) |
| How to post a charge to a customer profile | [Add order](../operations/orders.md#add-order) | [Point of sale](point-of-sale.md) |
| How to link an order to a reservation | [Add order](../operations/orders.md#add-order) (use `LinkedReservationId`) | [Events](events.md), [Kiosk](kiosk.md), [Guest technology](guest-technology.md), [Upsell](upsell.md), [Point of sale](point-of-sale.md) |
| How to link an order to a reservation | [Add order](../operations/orders.md#add-order) (use `LinkedReservationId`) | [Events](events.md), [Kiosk](kiosk.md), [Guest technology](guest-technology.md), [Upsell](upsell.md), [Point of sale](point-of-sale.md), [Allowances](allowances.md) |

## Availability Blocks

Expand Down
Loading
Loading