List tours
tours.read
Query parameters
Example
data — array of tour memberships:
role— the authenticated user’s role on the tour.member_count— number of members on the tour.tour.tourDays— the tour’s days; each dayidis used asdayIdin schedule and guest-list routes.
Create a tour
tours.write
Body
Day object (
days[])
Example
data: { "id": "2f1c…" } — the new tour’s ID.
Tour creation is subject to the subscription requirement (
402) for non-exempt organizations, and to the validation rules in Errors.Edit a tour
tours.write
Path parameters
Body — all fields optional; send only what you want to change.
Response
data: none (status + message only).
Delete a tour
404 TOUR_NOT_FOUND.
Scope: tours.write
Path parameters
Response
data: none.
Read a whole tour in one call
GET /v1/tours call to find out which day is which.
Scope: tours.read — plus schedule.read, venues.read, accommodation.read, guestlist.read and bulletins.read.
Query parameters — all optional.
Each
*Limit is clamped to 500. A response covering six resources across every day of a long tour can approach Lambda’s 6 MB ceiling, so the limits are capped rather than letting the response be truncated or the call fail. Pass dayIds and skipEmptyDays to keep responses small on long tours.A malformed dayIds (anything that isn’t a comma-separated list of integers) returns 400 VALIDATION_ERROR rather than being ignored — a typo must not quietly widen the response to the whole tour. Each *Limit must be a positive integer.data
GET /v1/tours call and a client-side join on the day ID. These field names are identical to the day object inside List tours, so the two reads are interchangeable for day identity.
A field that the day does not have is returned as an explicit
null, never omitted — so "type_id": null means “this day has no day type”, which is distinguishable from a field this API cannot supply.dayIds is scoped to the tour in the path. A day ID belonging to a different tour is simply absent from the response — it behaves exactly like an ID that does not exist.Day sheet
A day sheet is one tour day rendered the way a production office prints it: header, running order, venues, stays, a consolidated key-contact list, guest-list totals, bulletins, and a strip of the next few days. Two endpoints — read the model, then render it. Both requiretours.read plus schedule.read, venues.read, accommodation.read, guestlist.read and bulletins.read, for the same reason the whole-tour read does: one response spans all six resources. See Scopes.
Everything is filtered to what the authenticated user can see. A private schedule item they are not on is absent from the model and from the PDF.
Read the day sheet model
Response
data
Render the PDF
tourId and dayId come from the path. A tourId or dayId in the body is ignored, so a body cannot redirect the render at another tenant’s day.data
Check
ignoredIdCount. A non-zero value means the sheet you received is narrower than the one you asked for, because some ids you named are not visible to this user. The request still succeeds — it does not fail, and it does not tell you which ids were dropped, so that it cannot be used to probe for records on the tour.List tour members
users.read
Path parameters
Response
data
List Day Types
day_type_id values used in the days array when creating or editing a tour.
Scope: tours.read
No parameters. Day types are global — the same list applies to every organization and tour.
Example
data — array of day types:
See also: Schedule, Venues, Accommodation, Guest List, Bulletins.

