Skip to main content
Accommodation records are the stays booked for a tour — hotels, rentals, and residences. Accommodation IDs are integers. All endpoints require the standard authentication headers.

List accommodation

GET /v1/tours/{tourId}/accommodation
Returns the stays for a tour. Scope: accommodation.read Example
curl "$BASE/v1/tours/2f1c…/accommodation" \
  -H "x-api-key: $KEY" -H "x-api-secret: $SECRET" -H "Authorization: Bearer $TOKEN"
Path parameters
NameTypeDescription
tourIdstring (UUID)The tour.
Response data — array of stays:
{
  "id": 318,
  "title": "Grand Hotel",
  "subtitle": "City centre",
  "is_confirmed": true,
  "notes": "Late checkout arranged",
  "image": "https://…",
  "type": "HOTEL",
  "timezone": "Australia/Sydney",
  "street_address": "1 George St",
  "city": "Sydney",
  "zip_code": "2000",
  "country": "Australia",
  "state": "NSW",
  "check_in_date_time": "2026-06-01T15:00:00Z",
  "check_out_date_time": "2026-06-03T10:00:00Z",
  "booking_number": "ABC123",
  "coordinates": { "lat": -33.86, "lng": 151.20 },
  "day_id": 1843,
  "day_id_list": [1843, 1844],
  "is_deleted": false,
  "updated_at": "2026-05-20T08:00:00Z",
  "is_everyone": true,
  "is_admin_only": false
}

Create accommodation

POST /v1/accommodation
Scope: accommodation.write
Accommodation uses camelCase ID fields (tourId, dayId) — unlike most resources, which use snake_case (tour_id, day_id). See Field naming.
Body
FieldTypeRequiredDescription
tourIdstring (UUID)YesTour the stay belongs to.
formatted_addressLocationYesAddress object (see Location structure below).
checkInDatenumberYesCheck-in date (numeric).
checkOutDatenumberYesCheck-out date (numeric).
checkInTimenumberYesCheck-in time (numeric).
checkOutTimenumberYesCheck-out time (numeric).
reservationStatusbooleanYesWhether the booking is confirmed.
typeenumYesOne of HOTEL, RENTAL, RESIDENCE.
titlestringNoStay name.
subtitlestringNoSecondary label.
confirmationNumberstringNoBooking reference.
generalNotesstringNoFree-text notes.
image_urlstringNoImage URL.
dayIdnumberNoPrimary day.
daysListarray<number>NoDays this stay spans.
attachmentsarray<Attachment>No{ link, fileSize, … }.
isEveryone / isAdminsOnlybooleanNoVisibility shortcuts.
visibilityListarray<string>NoExplicit user visibility.

Date & time format

checkInDate, checkOutDate, checkInTime, and checkOutTime are numeric epoch milliseconds, not ISO strings. Confirmed against the live API. The stored check-in / check-out instant comes from checkInTime / checkOutTime — each is the full epoch-millisecond timestamp of the moment. checkInDate / checkOutDate are the date-only epoch-ms (midnight UTC) and do not affect the stored instant (they are used for date grouping only).
FieldTypeFormatExample
checkInTimenumberEpoch ms of the full check-in instant1781236800000 (2026-06-12T04:00:00Z)
checkOutTimenumberEpoch ms of the full check-out instant1781564400000 (2026-06-15T23:00:00Z)
checkInDatenumberEpoch ms, date only (midnight UTC)1781222400000 (2026-06-12)
checkOutDatenumberEpoch ms, date only (midnight UTC)1781481600000 (2026-06-15)
A previous version of this page described checkInTime / checkOutTime as “minutes from midnight” — that is incorrect. Passing minutes (e.g. 840) stores the time as 840 milliseconds past the Unix epoch (i.e. 1970), not 14:00. Always pass the full epoch-millisecond instant in checkInTime / checkOutTime.
Images: image_url accepts a publicly reachable image URL. The API fetches it server-side and re-hosts it in Daysync storage — the image returned by GET is a Daysync S3 URL, not the URL you sent. If the URL can’t be fetched, the create/edit fails with 400 { "error": "400", "message": "fetch failed" }, so the source must be reachable (mind spaces/encoding in the URL). Known quirk: the re-hosted filename currently comes out as undefined_<timestamp>.jpeg, but the image is stored and served correctly. (This differs from Venues, whose image field is not fetched.)
Response data: { "id": 318, "name": "…" }.

Edit accommodation

PUT /v1/accommodation/{accommodationId}
Scope: accommodation.write Path parameters
NameTypeDescription
accommodationIdintegerThe stay to edit.
Body — the edit input is a different, narrower set than create. Fields not listed below cannot be changed via edit.
FieldTypeRequiredDescription
titlestringNoStay name.
formatted_addressLocationNoAddress object (see Location structure below).
checkInDatenumberNoCheck-in date (numeric).
checkOutDatenumberNoCheck-out date (numeric).
checkInTimenumberNoCheck-in time (numeric).
checkOutTimenumberNoCheck-out time (numeric).
confirmationNumberstringNoBooking reference.
reservationStatusbooleanNoWhether the booking is confirmed.
generalNotesstringNoFree-text notes.
typeenumNoOne of HOTEL, RENTAL, RESIDENCE.
image_urlstringNoImage URL.
attachmentAttachmentNoSingle attachment { link, fileSize, … }.
attachmentsarray<Attachment>No{ link, fileSize, … }.
isEveryone / isAdminsOnlybooleanNoVisibility shortcuts.
visibilityListarray<string>NoExplicit user visibility.
Ignored on update: tourId, subtitle, dayId, and daysList are accepted in the request body but have no effect — sending them will not raise an error, but the values are silently ignored. They are set at creation time only and cannot be changed afterwards. The accommodationId is taken from the URL path — do not send it in the request body.
Response data: { "id": 318, "name": "…" }.

Delete accommodation

DELETE /v1/accommodation/{accommodationId}
Scope: accommodation.write Path parameters
NameTypeDescription
accommodationIdintegerThe stay to delete.
Response data: none.

Location structure

The formatted_address field on create and edit accepts a Google Places–style location object. The geometry.location and geometry.viewport sub-fields are required for the address to be valid.
{
  "formatted_address": "1 George St, Sydney NSW 2000, Australia",
  "place_id": "ChIJP3Sa8ziYEmsRUKgyFmh9AQM",
  "placeName": "Grand Hotel",
  "fullAddress": "1 George St, Sydney NSW 2000, Australia",
  "timeZone": "Australia/Sydney",
  "types": ["lodging", "point_of_interest", "establishment"],
  "address_components": [
    { "long_name": "1", "short_name": "1", "types": ["street_number"] },
    { "long_name": "George Street", "short_name": "George St", "types": ["route"] }
  ],
  "geometry": {
    "location": { "lat": -33.8688, "lng": 151.2093 },
    "viewport": {
      "northeast": { "lat": -33.8674, "lng": 151.2107 },
      "southwest": { "lat": -33.8702, "lng": 151.2079 }
    },
    "location_type": "ROOFTOP"
  }
}
FieldTypeRequiredDescription
formatted_addressstringNoFull human-readable address.
place_idstringNoGoogle Places ID.
placeNamestringNoShort name of the place.
fullAddressstringNoDuplicate of formatted_address (legacy).
timeZonestringNoIANA time zone.
typesarray<string>NoGoogle Places types.
address_componentsarrayNo{ long_name, short_name, types }.
geometryobjectYesMust include location and viewport.
geometry.location{ lat, lng }YesCoordinates.
geometry.viewport{ northeast, southwest }YesEach has { lat, lng }.
geometry.location_typestringNoe.g. "ROOFTOP".

See also: Tours, Venues.