HOS AIHOS AI
Mews Connector API → HOS Events 0.1 · Unofficial · Synthetic data

Mapping · Experimental

The same early arrival, with the PMS speaking Mews.

The PMS side of the arrival scenario now starts as Mews Connector API payloads. Webhook messages that carry only ids, then the reservation and room the integration fetches. A reference adapter turns them into 5 HOS facts, and the projection reaches the same outcome as the synthetic corpus.

Unofficial and experimental.

Written from Mews's published documentation and packages, listed below. HOS AI is not affiliated with Mews, and Mews has not reviewed or endorsed this mapping. Every payload is synthetic. The adapter has also run, read-only, against Mews's two public demo enterprises on 25 September 2026: 3,485 facts, every one valid HOS 0.1, and none published twice.

Delivered to HOS, in this order

0 / 12

Arrival-readiness projection

Waiting for facts

No situation

Deliver the first event, or play the whole scenario.

12 facts for the scenario's 13. Delivery 7 has no Mews counterpart. Housekeeping and messaging facts are unchanged. Times are shown in the property time zone (Europe/Paris).

Mapping

From Mews payloads to HOS facts.

The adapter never forwards a PMS payload. It compares each fetched entity with what it already published and emits only the facts that changed, with ids that stay the same when a webhook is delivered again.

Mews to HOS Events 0.1 mapping
Mews eventWhenHOS Events 0.1How
ServiceOrderUpdatedFirst seen Optional or Confirmedreservation.created, stay.expectedtime is CreatedUtc. The confirmation Number and the reservation Id become typed external references; AccountId becomes a pseudonymous guest_id through the crosswalk.
ServiceOrderUpdatedInquired or RequestedNothing yetNot a commitment: published once the reservation becomes Optional or Confirmed.
ServiceOrderUpdatedState, schedule or owner changedreservation.updated, stay.expectedOnly the changed fields travel, at UpdatedUtc with hostimebasis modified. The stay is announced again when its planned times move.
ServiceOrderUpdatedAssignedResourceId set or changedstay.unit_assignedprevious_unit_id is the unit already published; the reason is known only for the first assignment. At UpdatedUtc, hostimebasis modified.
ServiceOrderUpdatedAssignedResourceId removedstay.unit_unassignedThe released unit, at UpdatedUtc, hostimebasis modified.
ServiceOrderUpdatedStartedstay.checked_intime is ActualStartUtc, the actual arrival.
ServiceOrderUpdatedProcessedstay.checked_outtime is ActualEndUtc. A check-in the adapter missed is published first.
ServiceOrderUpdatedCanceledreservation.cancelled, or reservation.updatedCancellationReason NoShow becomes status no_show; the other reasons map to guest_request, property_request, payment_issue or other.
ResourceUpdatedDirty, Clean, Inspectedunit.status_changed · housekeepingAt UpdatedUtc, hostimebasis modified; previous only when the adapter saw it. The manifest, not the adapter, decides whether the PMS is authoritative.
ResourceUpdatedOutOfService, OutOfOrderunit.status_changed · maintenanceout_of_service; leaving it publishes operational, then the housekeeping state.
ResourceBlockUpdatedOutOfOrder, InternalUse blockunit.maintenance_scheduledStartUtc and EndUtc. OutOfOrder: out_of_service and not_sellable; InternalUse: not_sellable, reason internal_use. The block's name and notes stay in Mews.
ResourceBlockUpdatedBlock deletedunit.maintenance_cancelledAt DeletedUtc.
Other eventsCustomerAdded, CustomerUpdated, MessageAdded, PaymentUpdatedNot mappedProfiles stay in Mews; an arrival signal must be extracted from a message; payments have no HOS 0.1 counterpart.

Findings

What Mews taught us about HOS 0.1.

Mapping a real PMS is the test the synthetic corpus could not provide. These are the gaps it exposed, in the source and in the specification.

Webhooks say what changed, not how.

Mews sends entity ids only. The adapter fetches each entity and compares it with what it already published, so its memory is part of the integration and must be persisted.

A stay has no expected moment in Mews.

The stay is published with the reservation, at CreatedUtc. HOS Events now says so: stay.expected is due as soon as the stay is committed, with the arrival day as its business date.

Removing an assignment needed an event.

stay.unit_assigned requires a unit, and Mews can unassign one. HOS 0.1 now has stay.unit_unassigned.

One Mews state, four HOS dimensions.

OutOfOrder replaces the housekeeping state in Mews. HOS keeps both dimensions; the source simply stops reporting one of them.

Occurrence times are approximate.

Assignments and room states only carry the entity's last update, UpdatedUtc: an upper bound when several changes arrive in one fetch. HOS 0.1 now says so with hostimebasis modified.

Provenance stops at the PMS.

Mews does not say who changed a room state, why, what it was before or what caused it. The manifest's authority rule is what keeps a mirrored status from overriding the housekeeping system.

Blocks are more than repairs.

A Mews block is out of order or for internal use. HOS maintenance windows keep both and say which statuses they impose: out of service, out of sale, or both.

Beds are units.

Mews's demo enterprises assign dorm stays to beds, not rooms. On the first live run, those stays pointed to units HOS had never heard of. The adapter now publishes beds as units; a room and its beds are not yet one space in HOS.

Accommodation is a category, not a time unit.

Parking and meeting rooms are sold by the day, and long stays by the month. The live check first took in the wrong services; the integration now picks accommodation by resource category.

Tasks are out of reach.

There is no task webhook, and a Mews task points to a reservation, not a room. This integration publishes no housekeeping tasks.

Mapping kit

Check the mapping yourself.

The recording pins the PMS payloads, the adapter configuration and every difference from the synthetic corpus. The unit tests replay it and compare the outcome with the scenario's expected.json.