Rooms and rates
Read a property's room types, rate plans, rooms, extras and policies, the catalog you show guests before they book.
These five reads describe what the hotel sells and on what terms. They change rarely: cache them and refresh every few hours, or when an offer mentions an ID you do not know. Prices for actual dates come from offer search, not from here.
All five take the property in the path. A property_id other than the credential's own answers 404 Property not found.
List room types
/properties/{property_id}/room-typesrooms:readOperation roomType.listReturns every room type of the property, active or not, in the hotel's own order, with its occupancy, base price, amenities, photos and how many active rooms it has.
Parameters
GET /me.Example
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/room-types" \
-H "Authorization: Bearer cbk_••••"{
"room_types": [
{
"id": "da3b4c87-c1ca-4f13-8c90-066900f16d48",
"name": "Standard",
"description": null,
"base_price": 90.0,
"currency": "USD",
"max_occupancy": 2,
"max_adults": null,
"max_children": null,
"bed_type": null,
"size_sqm": null,
"amenities": [],
"photos": [],
"units": 6,
"active": true
},
{
"id": "cd4932a5-a172-4147-bfd6-fcd79a42af11",
"name": "Deluxe",
"description": null,
"base_price": 140.0,
"currency": "USD",
"max_occupancy": 3,
"max_adults": null,
"max_children": null,
"bed_type": null,
"size_sqm": null,
"amenities": [],
"photos": [],
"units": 4,
"active": true
}
// ... one more (Suite)
]
}| Field | Meaning |
|---|---|
base_price | The room type's standard nightly price. The price for real dates can differ: use offers |
max_occupancy, max_adults, max_children | Guests it takes in total, and limits by age group (null means no separate limit) |
photos | Image URLs |
units | Active rooms of this type |
active | false when the hotel has stopped selling it. Inactive types never appear in offers |
Errors
| Status | When |
|---|---|
403 | The app token lacks rooms:read |
404 | Property not found: not the credential's property |
List rate plans
/properties/{property_id}/rate-plansrooms:readOperation ratePlan.listReturns the hotel's rate plans: named ways of selling a room (with breakfast, non-refundable, long stay), each with its stay rules and cancellation policy. A plan with room_type_id set applies only to that room type; null means any. The sandbox has none, so the list is empty until you add one in the sandbox hotel.
Parameters
Example
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/rate-plans" \
-H "Authorization: Bearer cbk_••••"{
"rate_plans": []
}Each item has these fields:
| Field | Type | Meaning |
|---|---|---|
id | uuid | Pass it as rate_plan_id when booking |
name, description | string | As the hotel wrote them |
room_type_id | uuid or null | The one room type it applies to, or null for any |
meal_plan | string or null | Meals included, as the hotel set it |
refundable | boolean | false for a non-refundable plan |
default | boolean | The hotel's default plan |
active | boolean | Whether it is on sale |
min_stay_nights | integer | Shortest stay (at least 1) |
max_stay_nights | integer or null | Longest stay, if any |
cancellation_policy_id | uuid or null | Its own cancellation policy; null means the hotel's default applies. See policies |
Errors
| Status | When |
|---|---|
403 | The app token lacks rooms:read |
404 | Property not found |
List units
/properties/{property_id}/unitsrooms:readOperation unit.listReturns the physical rooms ("units"), sorted by name, with their room type and housekeeping status. You need them only to book a specific room (unit_id) or to show room numbers.
Parameters
Example
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/units" \
-H "Authorization: Bearer cbk_••••"{
"units": [
{
"id": "00635381-d0c0-4383-9bc0-7c74bfac07ec",
"name": "101",
"room_type_id": "da3b4c87-c1ca-4f13-8c90-066900f16d48",
"floor": null,
"status": "OCCUPIED",
"active": true
},
{
"id": "b1104463-171d-4f9e-8a65-a915207b1cba",
"name": "103",
"room_type_id": "da3b4c87-c1ca-4f13-8c90-066900f16d48",
"floor": null,
"status": "CLEAN",
"active": true
}
// ... 10 more
]
}status is the housekeeping state today: CLEAN, DIRTY, CLEANING, INSPECTING, READY, OCCUPIED, MAINTENANCE or DND. It says nothing about whether the room is free on future dates; use offers for that.
Errors
| Status | When |
|---|---|
403 | The app token lacks rooms:read |
404 | Property not found |
List extras
/properties/{property_id}/extrasrooms:readOperation extra.listReturns the extras on sale (breakfast, airport pick-up, late check-out) with their price and how they are charged. Add them when booking (extras) or later with reservation.addExtra. Only active extras are listed. The sandbox has none, so the list is empty until you add one in the sandbox hotel.
Parameters
Example
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/extras" \
-H "Authorization: Bearer cbk_••••"{
"extras": []
}Each item has these fields:
| Field | Type | Meaning |
|---|---|---|
id | uuid | Pass it as extra_id |
name, description | string | As the hotel wrote them |
price | number | The price of one |
unit | string | How it is charged: per_stay, per_night, per_person or per_person_per_night |
currency | string | The property's currency |
The amount charged is price times the quantity, times the nights for a per-night extra, times the guests (adults plus children) for a per-person extra.
Errors
| Status | When |
|---|---|
403 | The app token lacks rooms:read |
404 | Property not found |
Get policies
/properties/{property_id}/policiesproperty:readOperation policy.getReturns the hotel's terms: check-in and check-out times, tax, fees charged on every stay, and its cancellation policies. Show the cancellation terms to the guest before they book: when you cancel, the hotel's policy applies and you cannot waive its fee.
Parameters
Example
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/policies" \
-H "Authorization: Bearer cbk_••••"{
"check_in_time": "14:00",
"check_out_time": "12:00",
"currency": "USD",
"tax": {
"rate": 0.0,
"included_in_prices": false
},
"fees": [],
"cancellation_policies": [],
"default_cancellation_policy_id": null
}| Field | Meaning |
|---|---|
tax.rate | A percentage, for example 8.875 |
tax.included_in_prices | true: prices already contain the tax. false: tax is added on top |
fees[] | {"name", "amount", "per": "stay"}. Charged once on every stay (today: the cleaning fee) |
cancellation_policies[] | id, name, description (a sentence such as "Free until 48 hours before arrival, then 1 night."), default, free_cancellation_hours, charge_type (PERCENTAGE of the room price, or NIGHTS), charge_value |
default_cancellation_policy_id | The policy that applies when the rate plan has none of its own. null and no policy means cancelling is free |
Which policy applies to a booking: the rate plan's own policy if it has one, otherwise the hotel's default. A non-refundable plan with no policy of its own charges the room price whenever it is cancelled.
Errors
| Status | When |
|---|---|
403 | The app token lacks property:read |
404 | Property not found |
Building something?