Schedule items are the timed events on a tour day — soundchecks, travel, set times, and so on. They belong to a tour and a specific day. Schedule item IDs are integers.
All endpoints require the standard authentication headers.
List schedule items
GET /v1/tours/{tourId}/days/{dayId}/schedule
Returns the schedule items for one day of a tour.
Scope: schedule.read
Example
curl "$BASE/v1/tours/2f1c…/days/1843/schedule" \
-H "x-api-key: $KEY" -H "x-api-secret: $SECRET" -H "Authorization: Bearer $TOKEN"
Path parameters
| Name | Type | Description |
|---|
tourId | string (UUID) | The tour. |
dayId | integer | The day within the tour. |
Response data — array of schedule items. Each item includes timing, location, routing, and metadata:
{
"id": 9021,
"name": "Soundcheck",
"notes": "Load in via rear dock",
"start_time": "14:00:00",
"end_time": "15:00:00",
"allDay": false,
"status": true,
"formatted_address": "Sydney Opera House",
"timezone_start": "Australia/Sydney",
"timezone_end": "Australia/Sydney",
"location_coordinates": { "lat": -33.85, "lng": 151.21 },
"start_time_type": { "id": 1, "type": "FIXED" },
"end_time_type": { "id": 2, "type": "FIXED" },
"item_type": { "id": 3, "type": "EVENT" },
"item_color": { "id": 1, "type": "BLUE" },
"status_type": { "id": 1, "type": "CONFIRMED" },
"created_by": { "id": "…", "firstname": "Jane", "lastname": "Doe" },
"day": { "id": 1843, "name": "Day 1", "date": "2026-06-01T00:00:00Z" },
"origin": { "formatted_address": "…", "viewport": { "northeast": {"lat":0,"lng":0}, "southwest": {"lat":0,"lng":0} }, "timeZone": "…" },
"destination": { "...": "..." },
"providerName": null,
"bookingReference": null,
"traveldistance": null,
"travelduration": null,
"itemReminder": [ { "reminder": { "id": 1, "description": "…", "duration": 30, "is_sent": false } } ],
"is_deleted": false,
"updated_at": "2026-05-20T08:00:00Z"
}
Create a schedule item
Scope: schedule.write
Body — common fields (the underlying model supports more; see notes below):
| Field | Type | Required | Description |
|---|
tour_id | string (UUID) | Yes | Tour the item belongs to. |
day_id | number | Yes | Day the item is on. |
name | string | Yes | Item title. |
startTime | string (HH:mm) | Yes | Start time as a 24-hour time-of-day, e.g. 14:00. The date comes from day_id — do not send a full ISO 8601 datetime. |
startTimeTypeId | number | Yes | Start-time type — valid values. |
timeZoneStart | string (IANA) | Yes | Start time zone. |
endTime | string (HH:mm) | No | End time as a 24-hour time-of-day, e.g. 15:00. |
endTimeTypeId | number | No | End-time type — valid values. |
timeZoneEnd | string (IANA) | No | End time zone. |
allDay | boolean | No | All-day item. |
status | boolean | No | Status flag. |
statusTypeId | number | No | Status type — valid values. |
location | string | No | Display location. |
coordinates | { lat, lng } | No | Location coordinates. |
notes | string | No | Free-text notes. |
itemColorId | number | No | Colour tag — valid values. |
type | number | No | Item type (1 = regular, 2–6 = travel) — valid values. |
reminder | array<Reminder> | No | { duration, typeId, description } entries — typeId values. |
attachment | Attachment | No | Single attachment { link, fileSize, name?, fileName?, description? }. |
attachments | array<Attachment> | No | Multiple attachments (same shape as above). |
origin / destination | Location | No | For travel items: { formatted_address, viewport, timeZone }. |
travelbreaks | array<Location> | No | Intermediate stops: { formatted_address, viewport, timeZone } entries. |
providerName, bookingReference, plateNumber, driverName | string | No | Travel/provider metadata. |
traveldistance, travelduration | number | No | Travel metrics. |
traveltype | number | No | Travel mode (Car, Bus, …) — valid values. |
isRouteAutoCalculated | boolean | No | Whether route distance/duration were auto-calculated. |
googlemaps_uri | string | No | Google Maps URL for the location. |
isEveryone / isAdminsOnly | boolean | No | Visibility shortcuts — see Visibility below. |
visibilityList | array<string> | No | Explicit per-user visibility (user UUIDs) — see Visibility. |
invitesVisibilityList | array<number> | No | Visibility for pending invitees (invite IDs) — see Visibility. |
tagIds | array<number> | No | Tag IDs. |
Time format: startTime and endTime are 24-hour HH:mm time-of-day strings (e.g. 14:00), not ISO 8601 datetimes. The calendar date is taken from day_id.Travel items require an origin: when type is a travel item type (item types 2–6, e.g. drive, flight, walk), origin is required (and destination is normally included). Each is a { formatted_address, viewport, timeZone } object. Omitting origin on a travel item returns 400 VALIDATION_ERROR — “Travel items (type 2-6) require an origin”.
Response data: { "id": 9021 }.
Visibility
Four fields control who on the tour can see an item:
| Field | Meaning |
|---|
isEveryone: true | Visible to every tour member. |
isAdminsOnly: true | Visible to tour admins only. |
visibilityList | Visible to the listed members. Values are user UUIDs — get them from GET /v1/tours/{tourId}/users (tour_users[].user.id). |
invitesVisibilityList | Extends visibility to pending invitees (people invited but not yet joined). Values are invite IDs from the same endpoint (pending_invites[].id). |
If you send no visibility fields at all, the item is NOT visible to everyone — isEveryone defaults to false, so regular tour members won’t see it (admins and the creator still do). Most integrations should send isEveryone: true explicitly unless they’re targeting specific members.Also: isEveryone: true and isAdminsOnly: true together return 400 (conflicting flags) — send at most one of the two.
Attachments
Attachments are Daysync-hosted. Upload a file with POST /v1/attachments (which fetches a URL and stores the file), then pass the returned link here. link is a Daysync storage key, not an external URL:
"attachments": [
{
"name": "Stage plot",
"link": "attachments/8f3c…-stage-plot.pdf",
"fileName": "stage-plot.pdf",
"fileSize": 482133,
"description": "Rev 3 — updated monitor positions"
}
]
Only link is required (get it from POST /v1/attachments). fileSize is in bytes.
Don’t pass an external URL (e.g. your own CDN link) as link — Daysync treats link as one of its own storage keys and builds the public URL from it, so a foreign URL renders broken. Always upload via POST /v1/attachments first.
Update a schedule item
PUT /v1/schedule/items/{itemId}
Scope: schedule.write
Path parameters
| Name | Type | Description |
|---|
itemId | integer | The schedule item to update. |
Body — the update input is a different, narrower set than create. Fields not listed below cannot be changed via update.
| Field | Type | Required | Description |
|---|
name | string | No | Item title. |
status | boolean | No | Status flag. |
statusTypeId | number | No | Status type — valid values. |
startTime | string (HH:mm) | No | Start time as a 24-hour time-of-day, e.g. 14:00. |
endTime | string (HH:mm) | No | End time as a 24-hour time-of-day, e.g. 15:00. |
startTimeTypeId | number | No | Start-time type — valid values. |
endTimeTypeId | number | No | End-time type — valid values. |
allDay | boolean | No | All-day item. |
timeZoneStart | string (IANA) | No | Start time zone. |
timeZoneEnd | string (IANA) | No | End time zone. |
location | string | No | Display location. |
coordinates | { lat, lng } | No | Location coordinates. |
notes | string | No | Free-text notes. |
day_id | number | No | Move to a different day. |
itemColorId | number | No | Colour tag — valid values. |
googlemaps_uri | string | No | Google Maps link. |
origin / destination | Location | No | For travel items: { formatted_address, viewport, timeZone }. |
travelbreaks | array | No | { formatted_address, viewport, timeZone } entries. |
traveltype | number | No | Travel mode — valid values. |
providerName, bookingReference, plateNumber, driverName | string | No | Travel/provider metadata. |
traveldistance, travelduration | number | No | Travel metrics. |
isRouteAutoCalculated | boolean | No | Auto-calculated route flag. |
reminder | array<Reminder> | No | { duration, typeId, description } entries — typeId values. |
attachment | Attachment | No | Single attachment (same upsert semantics as attachments). |
attachments | array<Attachment> | No | Attachment upserts — see note below. |
isEveryone / isAdminsOnly | boolean | No | Visibility shortcuts — see Visibility. At most one may be true. |
visibilityList | array<string> | No | Explicit per-user visibility (user UUIDs). |
invitesVisibilityList | array<number> | No | Visibility for pending invitees (invite IDs). |
Not available on update: tour_id, type. These are set at creation time only. The itemId is taken from the URL path — do not send it in the request body.
Attachment upserts on update — each entry in attachments is processed by shape:
- No
id → creates a new attachment and links it to the item.
- With
id → updates that existing attachment’s fields.
- With
id and "deleted": true → permanently removes that attachment from the item.
"attachments": [
{ "name": "New rider", "link": "https://…/rider-v2.pdf" },
{ "id": 311, "description": "Updated description" },
{ "id": 290, "deleted": true }
]
Attachment id values come from the item’s attachments in the list response.
Response data: { "id": 9021 }.
Delete a schedule item
DELETE /v1/schedule/items/{itemId}
Scope: schedule.write
Path parameters
| Name | Type | Description |
|---|
itemId | integer | The schedule item to delete. |
Response data: none.
See also: Tours, Venues.