Links and hand-off
The API is read-only. Enrolling, buying, booking and registering all happen on the studio's hosted HotGlue pages. So every record carries a links object with the complete URL for the action it supports. Use those URLs as they are; never assemble a HotGlue URL yourself, because the paths are ours to change.
| Resource | Link | Where it goes |
|---|---|---|
| Class | links.checkout | Session-based: checkout for the whole run. Drop-in: the date picker. Null when not sold directly |
| Class | links.browse | The studio's public class browser |
| Class, trial, membership | links.store | The studio's store home |
| Session (instance) | links.checkout | Checkout for that one date. Set only for drop-in classes sold directly |
| Trial | links.enroll | The trial's own sign-up flow: the "Book a free trial" button |
| Trial | links.book | The studio's general booking page |
| Registration season | links.register | The season's sign-up wizard |
| Membership price | links.checkout | Checkout for that price (monthly, annual…) |
| Membership type | links.checkout | The first active price's checkout, for a single "Join" button |
| Membership type | links.detail | The membership's page in the store |
| Appointment service | links.book | The hosted booking page; null when customers can't self-book |
Which button to put on a class
Two fields decide it. enrollment_type says whether and how a family can get in; enrollment_model says whether they buy the run or a session.
enrollment_type | What it means | Button |
|---|---|---|
open or drop_in | Sold directly | See enrollment_model below |
seasonal | Sold through a registration season | Find the season in /registrations and link its links.register. The class's links.checkout is null |
closed | Invitation from the studio only | No button. links.checkout is null |
For classes sold directly, enrollment_model:
session_based: the family enrolls once for the whole run. Send them to the classlinks.checkout.per_instance: drop-in. Either send them to the classlinks.checkout(the date picker, where they choose a session) or list the sessions yourself from/classes/{id}/instancesand send them to a session'slinks.checkout, which pre-selects that date. A drop-in class with no upcoming sessions has nothing to sell; say so rather than linking.
One-time classes (schedule_type: "one-time") carry their date and time on their single session, not on the class, so fetch /classes/{id}/instances to show when they happen.
capacity.spots_remaining of 0 means full. You can still link checkout: it will not sell a seat that isn't there, and the family sees the waitlist or a full message.
What the family sees
The hosted pages handle accounts, waivers, payment methods, discounts, tax and confirmation emails. You hand off at the link; HotGlue takes it from there. If the studio runs a workflow on sign-up (a welcome email, a webhook to your system), it fires from those pages too. See Webhooks.