Plexe/Room resolution
mlr-1 · live in the API

Every supplier's offers,
grouped by room.mlr-1

Send all the room names your suppliers give for a hotel. mlr-1 puts offers that describe the same room on one card and groups those cards into room types, so the same room is far less likely to show up twice.

Try it

Map a real hotel's offers

Pick a hotel and paste supplier room names, one per line, or whole rates as JSON with beds, views, amenities and descriptions. Each run goes through mlr-1 live, the same as an API call.

Up to 25 names ·

The hotel's room types appear here, each with its rooms and the supplier names on them.

Why a model

No supplier mapping to build

Room mapping has meant an integration per supplier and a rule engine to turn its room names into rooms, rebuilt by every company that needs it. mlr-1 learned how hotels name rooms and how suppliers garble those names instead, trained on a written definition with right merges rewarded and wrong ones penalised. It reads a supplier it has never seen the same way it reads one it has, so a new OTA, TMC or travel company gets clean room types without mapping a single supplier.

How it decides

Same room, then room type

Two models trained on one written definition of a room. Rate terms never split a room; anything that makes a different stay does.

01 · Reads

Names and supplier fields

It reads each name as suppliers write it, codes and other languages included, with any beds, views, features and descriptions they send.

02 · Same room

One card per room

Offers share a card when they are the same room. A different tier, class, bed set-up, occupancy, view, feature or bedroom count keeps them apart.

03 · Room type

Rooms grouped like the hotel

The King, Twin and Family versions of a room come together under one room type, so you can show the hotel's own room list.

04 · Names

The hotel's name, when it fits

A card takes the hotel's official room name only when its offers agree with it; otherwise it is named from the offers.

Results

Results on 1,000 blind hotels

1,000 hotels worldwide, never used to train or tune the model, each with the room names from at least two suppliers.

LevelSystemF1Right mergesRooms foundCards per 100 names
Same roomLeading provider84.182.8%85.4%54.8
mlr-193.0+8.994.4%91.7%58.5 (true: 58)
Room typeLeading provider61.195.7%44.8%54.8
mlr-191.9+30.897.1%87.2%28.9 (true: 26)

B³ F1 over every supplier name. Right merges is purity (offers on one card that really are one room); rooms found is completeness (offers of one room that share a card). Labels follow our published room definition, made by two independent LLM referees with an adjudicator; a second labeller gives the same ranking. A second blind set of 1,000 hotels with supplier fields, and 600 hotels of live customer traffic, show the same picture. On a customer's own review sheet, mlr-1 passes all 17 complaints about offers shown as the wrong room.

API

One call per hotel

POST /v1/room-mappings
curl https://sandbox.plexe.ai/v1/room-mappings \
  -H "Authorization: Bearer $PLEXE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "hotelId": "39614731",
    "include": ["hierarchy"],
    "roomRates": [
      {"index": 0, "roomName": "Bay View Room, 1 King Bed"},
      {"index": 1, "roomName": "BAY VIEW ROOM KING - RO"},
      {"index": 2, "roomName": "TWN BAY VW RM NRF"},
      {"index": 3, "roomName": "Luxury Suite Sea View"}
    ]
  }'
200 OK · rooms[] and roomHierarchy
// offers grouped by room
"rooms": [
  { "name": "Room, 1 King Bed, Bay View", "rates": [0, 1] },
  { "name": "Room, 2 Twin Beds, Bay View", "rates": [2] },
  { "name": "Luxury Suite, Sea View", "rates": [3] }
]
// rooms grouped into the hotel's room types
"roomHierarchy": { "classes": [
  { "name": "Bay View Room", "roomIds": ["rm_…king", "rm_…twin"] },
  { "name": "Luxury Suite Sea View", "roomIds": ["rm_…suite"] }
] }

Illustrative shape; the full response also carries every rate, merged supplier content and stable room IDs. Read the reference.

Questions

What to expect

How do I get a key?

The docs and this page are open to everyone. Calling the API needs a key; sign in with yours, or ask your Plexe contact for one.