# Crewli API Contract Base path: `/api/v1/` Auth: Bearer token (Sanctum) ## Auth - `POST /auth/login` - `POST /auth/logout` - `GET /auth/me` ## Organisations - `GET /organisations` — list (super admin) - `POST /organisations` — create - `GET /organisations/{org}` — show - `PUT /organisations/{org}` — update - `GET /organisations/{org}/members` — members - `POST /organisations/{org}/invite` — invite user ## Events - `GET /organisations/{org}/events` - `POST /organisations/{org}/events` - `GET /organisations/{org}/events/{event}` - `PUT /organisations/{org}/events/{event}` ## Festival sections - `GET /events/{event}/sections` - `POST /events/{event}/sections` - `GET /events/{event}/sections/{section}` ## Time slots - `GET /events/{event}/time-slots` - `POST /events/{event}/time-slots` ## Shifts - `GET /events/{event}/sections/{section}/shifts` - `POST /events/{event}/sections/{section}/shifts` - `PUT /events/{event}/sections/{section}/shifts/{shift}` - `POST /events/{event}/sections/{section}/shifts/{shift}/assign` - `POST /events/{event}/sections/{section}/shifts/{shift}/claim` ## Persons - `GET /events/{event}/persons` - `POST /events/{event}/persons` - `GET /events/{event}/persons/{person}` - `PUT /events/{event}/persons/{person}` - `POST /events/{event}/persons/{person}/approve` _(Extend this contract per module as endpoints are implemented.)_