Class
A standalone class or one session of a course.
eventType to
tell them apart:
class— a standalone event with no parent.course_session— one session of a multi-session course.courseIdholds the opaque ID of the parent course, andpublicUrllinks to the course rather than to the single session.
Cancellations
A canceled class can remain visible so clients can see that it will not take place. In that case,isCanceled is true. Do not present that event as
bookable. Active classes and course sessions return isCanceled: false.
Times
start and end are UTC. localTimeStart and localTimeEnd are the same
instants in the studio’s zone with a numeric offset, and timezone names that
zone. See Dates and time zones.
References
A class points at its lecturers and location by ID rather than embedding them.lecturerIds holds opaque lecturer IDs — resolve them against
GET /v1/lecturers.
For a course session with a substitute lecturer, lecturerIds lists only the
substitute: the assignment replaces the course’s main and additional lecturers
for that session, and the lecturerIds filter follows the
same rule.
locationId holds an opaque place ID, or null — for an online class, and for
one the studio left without a place. Read isOnline to tell the two apart
rather than inferring it from locationId. Resolve a non-null value against
GET /v1/places.
For a course session this is the place set on that session. When a studio moves
a single session to another room, both locationId and the placeIds filter
follow that move rather than the course’s original place.
tags is the one exception: tags are embedded inline, because they are small
and change rarely. Each carries a numeric id you can feed back into the
labelIds filter.
Pricing
pricingOptions lists every way a client can pay for this class. See
Pricing option for how type, value, and
currency fit together, and why currency is missing on some entries.
Class pricing options carry an optional description; workshop ones do not.
Capacity
capacity appears only when you pass includeCapacity=true or
includeCapacity=1. It is more expensive, so request it only where you show
live availability.
max is the seat limit. Every class has one, so it is always a number.
reserved counts active and completed reservations.
available
field. Compute it as max - reserved, and clamp at zero — a studio can lower
the capacity below the number of existing reservations.A standalone class or one session of a course.
Opaque event ID. Not a sequential database ID — treat it as a string and do not parse it.
"9b1c4f7a2e6d8035c1a94fb27de60381"
Opaque ID of the parent course when eventType is course_session, otherwise null.
class for a standalone event, course_session for one session of a multi-session course.
class, course_session Start in UTC, ISO 8601 with a Z suffix.
"2026-03-15T08:00:00Z"
End in UTC.
Start in the studio's time zone, ISO 8601 with a numeric offset.
"2026-03-15T09:00:00+01:00"
End in the studio's time zone.
IANA time zone of the studio. Falls back to UTC when unset.
"Europe/Prague"
Opaque lecturer IDs. Resolve them against GET /v1/lecturers. For a course session with a substitute lecturer, only the substitute is listed.
Opaque place ID. null for an online class and for one with no place assigned — read isOnline to tell them apart. Resolve a non-null value against GET /v1/places.
true when the studio canceled this occurrence but kept it visible in the public calendar. Do not present it as bookable.
Link to this class, or to the parent course, on the studio's public Zenamu page.
Present only when includeCapacity is requested.

