Loyalty Points
Loyalty program per shop: fixed points per product (seeded when the product is created, then frozen) or rate-based points per amount paid. Customers redeem points at checkout; signed-in members see their own balance.
Try it with your AI assistant
Once WebsitePublisher is connected to your AI assistant, paste one of these into the chat. Replace the parts in [brackets] with your own details.
@WebsitePublisher start a loyalty program where customers earn [1 point] per [€1] and can redeem points at checkout@WebsitePublisher show signed-in members their points balance on their account page@WebsitePublisher give [customer email] [100] bonus points for their birthdayWith WebsitePublisher, start a loyalty program where customers earn [1 point] per [€1] and can redeem points at checkoutWith WebsitePublisher, show signed-in members their points balance on their account pageWith WebsitePublisher, give [customer email] [100] bonus points for their birthdayWith WebsitePublisher, start a loyalty program where customers earn [1 point] per [€1] and can redeem points at checkoutWith WebsitePublisher, show signed-in members their points balance on their account pageWith WebsitePublisher, give [customer email] [100] bonus points for their birthdayEndpoints (13)
Get the loyalty configuration of this shop. Empty = program not active.
No input parameters required.
Save the loyalty configuration (upsert). Requires mode (per_product or rate_based).
No input parameters required.
Get the fixed points of a product (all variants + the product default).
No input parameters required.
Set the fixed points for a product or variant (manual, frozen). Omit variant_id for the product default.
No input parameters required.
Set points for many products/variants at once (max 500). For a backfill of an existing catalog.
No input parameters required.
Spendable balance = Σ points_remaining (unexpired, committed) − active reservations. NOT balance_cache (that is only a cache).
No input parameters required.
Ledger history of a customer (newest first).
No input parameters required.
Reserve points for a checkout (earmark with a TTL). Validated against the available balance + redeem rules.
No input parameters required.
Release the reserved points of a checkout (payment failed or cancelled).
No input parameters required.
Book definitively after a successful payment: reserve → committed + earned points. Idempotent on order_id.
No input parameters required.
Manual correction or birthday bonus (+/−). The ONLY correct way to change a balance: uses up points_remaining FIFO (oldest unexpired lot first) and re-caches balance_cache. Never write separate points rows or edit balance_cache directly.
No input parameters required.
Spendable points of the signed-in visitor or member, for an account page or checkout. The account is taken from the verified session, never from the request: customer_email is refused (422). 401 without a verified session. Same figure as get-balance.
No input parameters required.
Ledger history of the signed-in visitor or member, newest first. Account from the verified session only; customer_email is refused (422). 401 without a verified session.
No input parameters required.
MCP Tool Names
When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:
| Endpoint | MCP Tool Name |
|---|---|
| get-config | loyalty_get_config |
| set-config | loyalty_set_config |
| get-product-points | loyalty_get_product_points |
| set-product-points | loyalty_set_product_points |
| bulk-set-product-points | loyalty_bulk_set_product_points |
| get-balance | loyalty_get_balance |
| list-transactions | loyalty_list_transactions |
| reserve | loyalty_reserve |
| release | loyalty_release |
| commit | loyalty_commit |
| adjust | loyalty_adjust |
| my-balance | loyalty_my_balance |
| my-transactions | loyalty_my_transactions |
Website