accommodation/lighthouse — the Lighthouse
nights 1 · shared · itinerary {'kind': 'route'} · time 14:00 · duration None · places None → None · counterpart None
Detail read as GET /services/{serviceFamily}/{serviceCode} → 200, checked against the contract's ServiceDetail: 22 deviation(s).
show
service missing-required — expected present, seen absentoccupancy missing-required — expected present, seen absentserviceFamily beyond-contract — expected not declared, seen stringserviceCode beyond-contract — expected not declared, seen stringtitle beyond-contract — expected not declared, seen stringnights beyond-contract — expected not declared, seen integerexclusivity beyond-contract — expected not declared, seen stringitinerary beyond-contract — expected not declared, seen objectcounterpart beyond-contract — expected not declared, seen nullembarkTimeLocal beyond-contract — expected not declared, seen stringdurationMinutes beyond-contract — expected not declared, seen nullembarkPlaceId beyond-contract — expected not declared, seen nulldisembarkPlaceId beyond-contract — expected not declared, seen nullvariants beyond-contract — expected not declared, seen arraysaleTypes beyond-contract — expected not declared, seen arraycompositions beyond-contract — expected not declared, seen arrayageGroups beyond-contract — expected not declared, seen arrayextras[0].priceRef missing-required — expected present, seen absentextras[1].priceRef missing-required — expected present, seen absentextras[2].priceRef missing-required — expected present, seen absentextras[3].priceRef missing-required — expected present, seen absentcontent beyond-contract — expected not declared, seen array
Variants
| variantId | axes | title | on sale |
standard | [] | the Lighthouse | True |
Sale types
| id | class | title | short | capacity | max/booking | inventory | basis |
main | flat | Main Suite | None | 3 | 2 | 2 | per-room |
corner | flat | River Front Corner Suite | None | 4 | 1 | 1 | per-room |
cozy | flat | River Front Cozy Suite | None | 3 | 0 | 0 | per-room |
standard | flat | Standard room #22 | None | 2 | 1 | 1 | per-room |
Compositions
| id | sale type | adults | children | infants | infant mode |
main-single | main | 1 | 0 | 0 | None |
main-double | main | 2 | 0 | 0 | None |
main-double-infant | main | 2 | 0 | 1 | shared-bed |
main-double-2infants | main | 2 | 0 | 2 | shared-bed |
main-double-1child | main | 2 | 1 | 0 | None |
main-triple | main | 3 | 0 | 0 | None |
corner-single | corner | 1 | 0 | 0 | None |
corner-double | corner | 2 | 0 | 0 | None |
corner-double-infant | corner | 2 | 0 | 1 | shared-bed |
corner-double-2infants | corner | 2 | 0 | 2 | shared-bed |
corner-double-1child | corner | 2 | 1 | 0 | None |
corner-triple | corner | 3 | 0 | 0 | None |
corner-double-2children | corner | 2 | 2 | 0 | None |
corner-quad | corner | 4 | 0 | 0 | None |
cozy-single | cozy | 1 | 0 | 0 | None |
cozy-double | cozy | 2 | 0 | 0 | None |
cozy-double-infant | cozy | 2 | 0 | 1 | shared-bed |
cozy-double-2infants | cozy | 2 | 0 | 2 | shared-bed |
cozy-double-1child | cozy | 2 | 1 | 0 | None |
cozy-triple | cozy | 3 | 0 | 0 | None |
standard-single | standard | 1 | 0 | 0 | None |
standard-double | standard | 2 | 0 | 0 | None |
standard-double-infant | standard | 2 | 0 | 1 | shared-bed |
standard-double-2infants | standard | 2 | 0 | 2 | shared-bed |
Age groups
| group | from | to | answered by |
| infant | 0 | 4 | family |
| child | 5 | 4 | family — inverted |
| adult | 5 | 120 | family |
Extras
| id | title | basis | sale mode | free | priceRef |
breakfast | Breakfast at the hotel | per-person | always | False | <absent> |
extra-guest | Additional guest / extra bed | per-person | always | False | <absent> |
late-checkout | Late check-out | per-booking | on-request | False | <absent> |
cot | Baby cot | per-booking | on-request | True | <absent> |
Rules — each with its provenance
| rule | value | source | enforced |
cut-off | {'days': 5, 'boundary': 'end-of-day', 'timezone': 'Asia/Ho_Chi_Minh'} | cut-off | True |
no-show | {'days': 0, 'boundary': 'end-of-day', 'timezone': 'Asia/Ho_Chi_Minh'} | no-show | True |
refund-tiers | {'bands': [{'id': 'early', 'until_days': 5, 'retained_pct': 5, 'of': 'stay', 'cap_nights': 0.5, 'text': 'up to 5 days before arrival: a 5 % administration fee, but no more than 50 % of one night'}, {'id': 'partial', 'until_days': 2, 'retained_pct': 50, 'of': 'night', 'text': 'between 4 days and 48 hours before arrival: 50 % of one night'}, {'id': 'late', 'until_days': 0, 'retained_pct': 100, 'of': 'night', 'text': 'less than 48 hours before arrival, or after check-in: 100 % of one night'}, {'id': 'no-show', 'no_show': True, 'retained_pct': 100, 'of': 'stay', 'text': 'no-show: the full stay'}], 'anchor': 'check-in', 'boundary': 'end-of-day', 'timezone': 'Asia/Ho_Chi_Minh', 'grace_first': True, 'norefund_plans': 'a rate plan replaces the whole ladder with no-amend, no-refund (F3 §5) — the grace still overrides it'} | refund-tiers | True |
booking-grace | {'hours': 24, 'from': 'booking', 'precision': 'minute', 'capped_by': 'departure', 'overrides': ['cut-off', 'no-show', 'no-refund plans'], 'supplier_charges': 'absorbed', 'enforced': False, 'enforced_by': ['native-api cancel (Rules::refundFor, 05-Sep-2026)']} | booking-grace | False — stated, not applied |
hold-ttl | {'minutes': 15, 'from': 'hold', 'told': 'nobody', 'then': 'confirm re-reads the feed and tells the desk'} | hold-ttl | True |
Content
[] · contentRefs: <absent>
Quotes read for this service
anonymous · 422 · state · total — · date 2026-09-07 (first calendar day on sale with a free main) · expires
rules that touched this price (0)