Open PMS API
Connect any PMS β or the integration platform between your PMS and other systems β without waiting for a built-in connection. The PMS sends each reservation to one web address whenever it changes; rooms, TVs and guests' phones follow. Mews and Apaleo have their own connection (PMS) and do not need this.
Reference: Open PMS API reference Β· OpenAPI file
How it works
State, not events. Send the whole reservation every time it changes β status, room, dates, guest. Sending the same reservation twice, or two updates in the wrong order, gives the same result: the last state wins.
What each status does
statusWhat happens bookedThe stay gets a guest link for before arrival (with the room type if you send it) in_houseThe guest is checked into room: the TV greets them by name, the phone app opens, room devices get the guest's settingschecked_outThe guest is checked out: the TV clears the guest's history and app logins and turns its screen off, phones are disconnected canceled,no_showThe guest link closes Rooms by number, room types by name β exactly as written in the console (Settings β Property). Moving a guest is an
in_houseupdate with the new room.Guest names are used only to greet the guest on the TV while in house. The console shows only the first letter (J***), and the name is deleted at check-out.
Set up the connection
- In the console, Settings β Integrations β PMS, open the Open PMS API tab and press Connect Any PMS (Open PMS API). Give it a name and Save β it is on (only one PMS can be on at a time).
- Press Use the room numbers here once β it lists the console's room numbers and room types as the ones the PMS will send (done again by itself with every message, so new rooms are picked up).
- Copy the webhook address and give it, with this page, to whoever runs your PMS. The address is the password: keep it out of public places; New address replaces it at once.
- Send a test event checks the address. The connection's log lists every message and what it did.
Send a reservation
POST the reservation to the webhook address with Content-Type: application/json:
POST https://nnilcrwcusuhmauixpaf.supabase.co/functions/v1/integrations/v1/hooks/{key}
Content-Type: application/json
{
"reservation": {
"id": "R-10045",
"status": "in_house",
"room": "632",
"roomType": "Suite",
"arrival": "2026-10-25",
"departure": "2026-10-27",
"guest": { "name": "Jane Doe", "language": "en" }
}
}
Several at once (up to 100) β for example after the PMS was offline:
{ "reservations": [ { "id": "R-10045", "status": "checked_out", "room": "632" }, { "id": "R-10046", "status": "booked", "roomType": "Deluxe", "arrival": "2026-11-02", "departure": "2026-11-05" } ] }
| Field | Required | Notes |
|---|---|---|
id |
yes | The PMS's reservation id β the same on every update (letters, digits, . _ : - /, up to 120) |
status |
yes | booked, in_house, checked_out, canceled or no_show |
room |
for in_house |
The room number as in the console |
roomType |
no | The room type's name as in the console |
arrival, departure |
no | Hotel-local dates, YYYY-MM-DD |
guest.name |
no | For the TV's greeting β Guest when left out |
guest.language |
no | en, de, ko, zh β¦ β the TV and guest app use it; en when left out |
Answers
| Code | Meaning |
|---|---|
200 { "received": true } |
Taken. It is applied right after the answer β see the connection's log for each result |
200 { "received": true, "ignored": true } |
The hotel switched the connection off; nothing was applied |
400 { "received": false, "errors": [ β¦ ] } |
The body is not valid β every problem is listed, nothing was applied |
404 |
Unknown address β wrong, or replaced with New address |
413 |
The body is larger than 256 KB β send fewer reservations at a time |
A GET on the address answers 200 β for a PMS's "test connection" button.
curl
curl -X POST "$WEBHOOK" -H "Content-Type: application/json" \
-d '{"reservation":{"id":"TEST-1","status":"in_house","room":"632","guest":{"name":"Test","language":"en"}}}'
curl -X POST "$WEBHOOK" -H "Content-Type: application/json" \
-d '{"reservation":{"id":"TEST-1","status":"checked_out","room":"632"}}'
Good practice
- Send on every change the PMS makes: booking, room assignment, check-in, room move, extension, check-out, cancellation.
- Retry on a timeout or a
5xxβ a retry is always safe. - The connection's log in the console shows Skipped with a reason when a room number is not known here, or a guest is in house without a room β fix the room in the console or the PMS and send the reservation again.
- A guest checked in from the console is never checked out by the PMS.