Skip to main content
This guide builds a month view showing classes and workshops together, with lecturer names, locations, prices, and live availability. Everything here uses the public API key, so it can run in a browser.

1. Fetch reference data once

Lecturers and places change rarely, and the schedule references them by ID. Fetch both up front and build lookup maps:
Pass includeInactive=true so lecturers who have since left the studio still resolve on older events.
Cache these. Refetching them per event will exhaust your rate limit on a busy month.

2. Fetch the schedule

Classes and workshops are separate endpoints with the same date range. Ask for capacity only if you display availability.
Both ranges are read in the studio’s time zone, not the visitor’s. See Dates and time zones.

3. Merge the two lists

The two shapes differ in three places. Normalize them before rendering:
An unresolved locationId means the place was archived. Fall back to showing no location rather than treating it as an error.

4. Display times

Format the UTC start in the event’s timezone. A studio in Prague announces a class at 09:00, and that is what a visitor expects to read regardless of their own time zone:
Keep the UTC start for sorting and storage. Do not parse localTimeStart and then format it in the visitor’s time zone.

5. Display prices

A single event can offer several ways to pay. value is only a money amount when currency is present:
Prefer the studio’s own name where you have room for it. See Pricing option. The API is read-only — it does not create reservations. Send visitors to publicUrl to book. For a course session that link points at the parent course, not the single session.

Course sessions

Classes and course sessions arrive in the same list. If you want a timetable of individual occurrences, render both. If you want a catalog of courses, group by courseId and show each course once: