Browse the docs

Set up what you offer and when

Anything you run on a schedule is an offering: a class, a course, a workshop, an event or open hours. Set it up in one go, with its schedule, room, prices and who can join, and we keep your sessions filled in ahead.

An offering is one thing you run, made of dated sessions. Start from the kind that fits (a weekly class, a course or series, a workshop, a 1:1 appointment or lesson, a rental, an event, a camp, a retreat, open hours, day care, an exhibition or table reservations). The kind only sets sensible starting points, like how many people fit and how far ahead sessions appear.

Set it up in one go, or ask the assistant to: “A 6-week pottery course on Tuesdays and alternate Thursdays, $240 for the series or $45 a drop-in, members 15% off, 16 and over, waiver required, in the kiln room.” Before anything is saved you see every session date, each price, who can join, and the room and staff. Saving it never messages anyone.

What people buy is an admission: the whole series, one session, a set of dates or a number of sessions to pick later. Each admission is a product in your catalog with its own price, and it can be pay what you want, with a minimum and a suggested amount. Each one can say who can join (an age, a signed waiver, a membership, a current record like a vaccination, or your OK) and give members a discount or early booking. You can name a waiver or membership you haven’t set up yet.

If you’ve asked the assistant to check with you before changing prices, a save that adds or changes a price waits for your OK. The same save with prices unchanged goes ahead. If a room gets booked between the suggestion and your OK, nothing is saved and we tell you what’s in the way.

Sessions come from a repeating schedule (Tuesdays and Thursdays at 6, every other week, the second Saturday of the month), from dates you pick, or both. Repeating sessions are added about four months ahead and kept topped up every day. If you sell the whole series, every session is there from the start, so the schedule needs an end date or a number of sessions.

Time slots are another way: a session every 15 or 30 minutes through your opening hours, like a restaurant’s tables. One booking can take several slots in a row, so a table for a 90-minute dinner holds its seats from 7:00 to 8:30. Change your hours and the slots follow: new hours get slots, and slots nobody booked go when you close. A booked slot stays for you to move or keep.

Each session holds the room or equipment it needs, plus any setup and cleanup time, so nothing gets booked twice. A class can’t hold more people than its room fits. Each session also has its staff: who leads it, and any substitute, assistant or host. Staff are held for their sessions like rooms, so nobody is booked for an appointment mid-class, and a new class that lands on someone’s lesson is refused with the clash named. A class, course, workshop, event or camp with nobody named is yours to lead, so it holds your time too. Open hours, day care, exhibitions and rentals don’t.

Times follow the location: a session at a venue in another time zone shows that venue’s time. If you change your time zone, scheduled sessions keep their clock time. Bookings made for an exact time keep that time.

List what people should bring, with links where it helps. Customers see it before they buy and in their confirmation.

Tags group offerings on your booking page. Offerings that share a tag show under one heading, like Massage over Swedish, Deep tissue and Prenatal, and each keeps its own options and staff. By default each offering shows under its first tag, and headings come in the order of your offerings on Schedule, Offerings. To choose the headings yourself, pick tags under Headings on your booking page and put them in order. Offerings without one of them show after the headings. Use the default goes back.

Archiving an offering stops new sessions and takes what it sells off sale. Sessions nobody has booked come off your schedule, and booked ones stay until you call them off. Saving it again brings it back.

For agents

offerings.shapes lists the kinds to start from, each with fields to ask about, defaults and a worked example input. offerings.save (tier 2) saves a whole offering in one call: key (your own name for it; the same key again updates it) or offeringId, shape or kind, name, capacity, locationId (a location’s name or id), resources (by resourceId, groupId or name), staff (each resourceId a team member’s name or id), patterns and dates (new ones are added; change a running schedule with offerings.editPattern), slotMinutes (time slots through the opening hours instead of a schedule; can’t go with patterns or onDemand), visibility, holdMinutes (how long a place booked through a customer’s assistant is held, default 30), bookAheadDays (how many days ahead customers can book a session; members with early booking add theirs) and admissions, the whole list (ones left out come off sale): each with name, selector, priceMinor or payWhatYouWant (minMinor, suggestedMinor, maxMinor), reservedSeats, stock, dates for a set, requires keys (age:16+, age:6-9, form:<key>, membership:<key>, file:<key>, approval) and benefits ({ key: "membership:<key>", percentOff, earlyDays }; a membership:<key> requirement makes it members-only), plus an optional requestId to retry safely. It touches commerce.createProduct or commerce.updateProduct only when a product is added or its name or price changes, and commerce.createAudience, commerce.publishAdjustment and commerce.archiveAdjustment only when a percentOff perk is added, changed or dropped (each is a discount on the admission for the audience of everyone holding that membership or pack), so commerce’s approval setting applies then. addOns are products by name or id, or new ones described in place ({ name, priceMinor, durationMinutes }; no minutes for an item), made in the same save; one with the same name as a product is reused. A refusal lists every problem with its field; a name that matches none, or more than one, names the choices with their ids and the read that lists them (resources.list, business.locations, team.members, commerce.products). offerings.addSessions (tier 2) adds dates or patterns to an offering already set up, named by offering (its name or id), and runs as that save. It answers offeringId, created, added (sessions) and admissions with their admissionIds. offerings.list lists offerings (status, kind) with the next session and how many are coming. offerings.get takes offeringId and returns its settings, patterns, rooms (resources), staff with roles, equipment and admissions (each a commerce product with a selector: one, all, set or flex, and reservedSeats set aside for series buyers). offerings.sessions lists sessions (offeringId, from as a local date, days up to 120, calledOff) with capacity, taken and remaining seats and staff. offerings.archive takes offeringId and takes its admissions off sale. Offerings come in the owner’s order everywhere (offerings.list, the booking page); new ones go last. offerings.reorder (tier 2) takes offeringIds in the new order: they swap into the places they held among the rest, so name only the ones you’re moving. Booking-page headings come from tags: by default each offering groups under its first tag, headings in the order of offerings, untagged ones after them. offerings.saveBookingPage (tier 2) takes groups, tags already on offerings in the order their headings show; only those become headings, and an offering wearing several goes under the first. It refuses an empty tag, one listed twice or one no running offering wears, and groups: [] goes back to the default. offerings.bookingPage answers the saved groups (empty for the default) and every tags value headings can use. offerings.bookable answers the resolved groups, each heading with its offeringIds.