OpenTravelIndex
Lab test deployment at travel.lab.pinnacledigital.com. Demo hotels are fictional; no payments are taken. The name and namespace are provisional.

Draft proposal to UCP: lodging search and availability

Status: draft, not filed. Filing upstream is an owner action (implementation plan P2 step 5). Based on UCP main at ad9950ba (2026-10-09).

Problem

dev.ucp.lodging.booking starts from "property, stay, rate plan, and stay date details discovered from upper-funnel search", and PR #780 lists upstream search/discovery and post-purchase management as out of scope. The charter lists availability and rate fetching as future work. Today each platform fills the gap with a proprietary feed, so a small hotel that implements UCP booking is still invisible unless a large connectivity partner carries it.

Proposal

Two capabilities in the lodging service, modelled on the booking capability's conventions (snake_case, minor-unit amounts, totals[] semantics, date_interval, occupancy):

  1. dev.ucp.lodging.availability: POST /availability with property, stay dates, occupancy and rooms; returns provisional offers. Each offer carries the accommodation_type and rate_plan ids accepted by Create Booking Session, all-in totals[] (with taxes and mandatory fees itemized and the property-collected part marked), a payment schedule aligned with dev.ucp.common.payment.terms, a machine-readable cancellation schedule, and expires_at. Offers are explicitly provisional: the booking session remains authoritative.
  2. dev.ucp.lodging.search: POST /search by location radius or place text, stay dates and occupancy, returning property summaries with the availability offers above.

Machine-readable cancellation terms

The cancellation-policy extension classifies refundability but leaves deadlines and penalties as text. We propose an optional structure on the policy item: rules[{ before, penalty_amount }] and final_penalty_amount, in the session currency. Cancelling at time *t* costs the penalty of the first rule with *t* earlier than before, otherwise the final penalty.

Reference implementation

The OpenTravelIndex profile implements all three under its own namespace (<ns>.lodging.search, .availability, .reservation) with Apache-2.0 schemas, a conformance validator, a reference server and a Mews adapter. If the council adopts these capabilities, OTI will switch to the dev.ucp names.

Gaps found mapping real systems (K4)

SystemFieldGap
Mews Connector APICancellationPolicies come from a beta, restricted endpoint; without it a rate must be presented as non-refundable
Mews Connector APIFees paid at propertyNot distinguished from prepaid amounts in reservations/price; OTI marks everything as collected at the property
UCP bookingCancellation deadlines and penaltiesFree text only (see above)