Load a whole tour in one call
The fastest way to hydrate a tour. Instead of paging schedule, venues, accommodation, guest lists, and bulletins day by day, ask for all of it at once:scheduleItems, venueItems, accommodations, guestLists, bulletins, and passTypes, plus per-day counts.
Narrow it on large tours with dayIds (comma-separated) and the per-resource limits scheduleLimit, bulletinLimit, staysLimit, guestLimit — each capped at 500:
Resolve the IDs a write needs
Almost every create fails without the right numeric IDs. One call gets nearly all of them:data.types[] by name — statusTypes, scheduleItemTypes, avatarColors, venueCategories, hotelRoomTypes, and so on. Cache it; these change very rarely. See Reference Data.
Tag a schedule item
Tags are per-tour, so read or create the tag first, then attach it.1
Get a colour
GET /v1/reference/types → data.types[] where name is avatarColors. Take an id.2
Find or create the tag
GET /v1/tours/{tourId}/tags to see what exists. If it does not, create it:3
Read the item's current tags
Tags come back on each item from
GET /v1/tours/{tourId}/days/{dayId}/schedule, under schedule_item_tags[].tag.id. You need these because the next step replaces the whole set.4
Set the full tag set
tagIds directly in the create body. See Tags.
These recipes show how the endpoints fit together. All calls assume the standard authentication headers; the examples use these shell variables:
1. Full tour setup
Stand up a complete tour from scratch.- Find the organization —
GET /v1/organizationsto get theorg_idthe tour will belong to. - Create the tour with its days —
POST /v1/tourswithname,org_id,start_date,end_date,timeZone, and a non-emptydays[]array. The response returns the new tourid. - Get the day IDs —
GET /v1/tours?org_id=...and readtour.tourDays[].id; these are thedayIdvalues used by schedule, venue, and guest-list routes. - Add schedule items —
POST /v1/schedule/itemswithtour_id+day_id. - Add a venue —
POST /v1/venueswithtour_id+day_id. - Add accommodation —
POST /v1/accommodationwithtourId+dayId(note the camelCase).
2. Sync a tour
Keep a local copy in step with Daysync.- Read the tour list —
GET /v1/tours?org_id=...and read each tour’supdated_at/is_deleted. - Read each resource — for each day,
GETschedule, venues, accommodation, guest list, and bulletins. Page each one with theoffsetfrom itspagination.nextOffsetuntilpagination.hasMoreisfalse. - Diff against local state — compare IDs and
updated_attimestamps; treatis_deleted: trueas a removal. - Apply changes —
PUTchanged items,POSTnew ones,DELETEremoved ones.
There are no webhooks yet — syncing is poll-based. See pagination and rate limits before choosing a polling interval.
3. Guest list management
- Read or create pass types —
GET /v1/tours/{tourId}/passTypeslists them, andPOST /v1/tours/{tourId}/passTypescreates one. They no longer have to be set up in the Daysync app first. See Pass object. - Add guests with passes —
POST /v1/guestlistwithtour_id,day_id, guest details, and apassesarray. - Update status — prefer
PUT /v1/tours/{tourId}/guestlist/statusfor approvals: it is all-or-nothing across the batch, and unlikePUT /v1/guestlist/{guestListId}it does not require you to resend each guest’s whole record (a partialpassesarray on that endpoint wipes the rest).

