Passes
The /passes and /customer-passes endpoints need the Store module. Calls return
403 module_disabled when it is off.
A pass is something a shop sells once and the customer uses on later bookings: a season pass, a 10-visit card, a summer membership. A pass can also charge every month and take a percentage off every booking instead: see Memberships. Each pass has:
- a name and a price
- visits: a number, or unlimited (
null) - how long it works: between two dates (
valid_from,valid_to, both days included, in the shop's time zone), or a set time from the day it is bought (valid_forwithvalid_for_unitmonthsordays). A pass uses one or the other, never both - what it covers, for experiences and for rental items separately: all of them, chosen categories (a parent category covers its subcategories), chosen items, or none (
experience_applies_to,rental_applies_to) - who can buy it (
who_can_buy):everyone(the booking page, POS and the app),staff_only(POS, the app, the API and Dash; never the booking page) oroff(not for sale; passes already sold keep working)
One pass is for one named holder. When a customer buys a pass they get a customer pass
with its own code, for example PASS-7QKM-B4RT, emailed once the order is paid.
Every customer pass carries its own valid_from and valid_to. For a dated pass they are the
pass's dates. For a pass that runs from purchase, valid_from is the day it was sold on the shop's
calendar and valid_to is valid_for months or days later: a 12-month pass sold on 2026-10-23
works through 2027-10-23, and one sold on 2027-02-10 works through 2028-02-10. A month that has no
matching day ends on its last day (one month from January 31 ends on February 28).
Using a passโ
A pass brings one booking line to zero, using one visit for each person, group or rental
unit on it (two crafts on a per-group price use two visits). With fewer visits left than the
line needs, it covers what it can and the rest is charged. Each use reports visits_used. The
same pass goes on one line per booking.
| When | What happens to the visit |
|---|---|
| The booking is written (API, POS, Dash) or the customer presses Pay online | Held - it comes off visits_left |
| The booking is confirmed or paid | Used |
| A draft, quote or request | Stays held until it is confirmed |
| The booking is cancelled, a draft is discarded, a request is declined, or an online checkout is never paid (60 minutes) | Released - the visit goes back |
| The booking moves to another date | Stays used; the person stays free at the new date's price |
Scopesโ
| Endpoint | Scope |
|---|---|
GET /passes, GET /passes/{id}, POST /passes/check, GET /customer-passes, GET /customer-passes/{id}, GET /customer-passes/{id}/payments | store:read |
POST /passes, PATCH /passes/{id}, DELETE /passes/{id}, POST /customer-passes, POST /customer-passes/{id}/cancel | store:write |
POST /bookings/{id}/passes, DELETE /bookings/{id}/passes/{visit_id}, POST /bookings/{id}/membership, DELETE /bookings/{id}/membership | bookings:write |
Pages in this sectionโ
- Manage passes - list, get, create, update and delete the passes a shop sells
- Customer passes - the passes customers hold, and issuing one
- Check a code - would this code work on this item and day
- Use a pass on a booking - on a new booking, or one that already exists
- Memberships - monthly passes with a member discount: cancel one, its monthly charges, the discount on a booking