> For the complete documentation index, see [llms.txt](https://docs.vomevolunteer.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.vomevolunteer.com/resources/schedule.md).

# Schedule

Everything that makes up an organization's schedule.

* **Shifts** are the dated, timed slots people book onto. Every shift belongs to an opportunity.
* **Shift Series** are repeating shifts. A series is a standing instruction that keeps generating shifts, rather than a fixed batch of dates.
* **Shift Locations** are the reusable addresses shifts are held at. A shift either points at one, or inherits its opportunity's address.
* **Reservations** are the bookings themselves: who is on which shift.

A typical integration reads the opportunity it wants to schedule against, looks up or creates the location, then creates the shifts.

```plaintext
GET  api/opportunities/                 find the opportunity
GET  api/shift-locations/               find or create the location
POST api/shift-locations/bulk-create/
POST api/shifts/bulk-create/            create the shifts
POST api/shifts/bulk-assign/            book people onto them
GET  api/reservations/                  read the bookings back
```

Shifts and shift locations are separate on purpose: a location is worth creating once and pointing many shifts at, so that correcting an address fixes every shift held there at the same time.

Use a series when the schedule repeats. Creating fifty-two weekly shifts as fifty-two rows gives you a year and then silence, while a series carries on generating and can be edited, extended or ended in one call.
