> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zenamu.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Workshop

> A standalone event with its own address.

Workshops are one-off events — seminars, intensives, retreats — kept separate
from the regular class schedule. Canceled workshops are never returned.

## Address, not a place

A workshop carries `address` directly instead of referencing a
[place](/api/objects/place). This is the main difference from a
[class](/api/objects/class), and it has two consequences:

* There is no `locationId` to resolve, and no `isOnline` flag.
* The workshops endpoint has no `placeIds` [filter](/api/filtering).

`address` is `null` when the studio filled in no address field at all.
Otherwise the object is present and each of `street`, `city`, `postalCode`, and
`country` is independently nullable.

## Times and references

`start`, `end`, `localTimeStart`, `localTimeEnd`, and `timezone` behave exactly
as on a [class](/api/objects/class#times). `lecturerIds` holds opaque lecturer
IDs to resolve against
[`GET /v1/lecturers`](/api/v1/reference/lecturers/list-lecturers), and `tags`
are embedded inline.

`shortDescription` is the workshop's description — note the different field name
from a class, which uses `description`. `image` is a URL or `null`.

## Capacity

`capacity` appears only when you pass `includeCapacity=true` or
`includeCapacity=1`:

```json theme={null}
{ "max": 25, "reserved": 18, "available": 7 }
```

Workshops report `available` directly, which classes do not. It is
`max - reserved`, clamped at zero, so it never goes negative when a studio
lowers the capacity below the existing reservations. Every workshop has a seat
limit, so `max` and `available` are always numbers.
