ChatBedsDevelopers
API reference

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

GET/properties/{property_id}/room-types
Scope rooms:readOperation roomType.list

Returns 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

property_id uuid (path)required
The property, from GET /me.

Example

Request
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/room-types" \
  -H "Authorization: Bearer cbk_••••"
200 OK
{
  "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)
  ]
}
FieldMeaning
base_priceThe room type's standard nightly price. The price for real dates can differ: use offers
max_occupancy, max_adults, max_childrenGuests it takes in total, and limits by age group (null means no separate limit)
photosImage URLs
unitsActive rooms of this type
activefalse when the hotel has stopped selling it. Inactive types never appear in offers

Errors

StatusWhen
403The app token lacks rooms:read
404Property not found: not the credential's property

List rate plans

GET/properties/{property_id}/rate-plans
Scope rooms:readOperation ratePlan.list

Returns 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

property_id uuid (path)required
The property.

Example

Request
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/rate-plans" \
  -H "Authorization: Bearer cbk_••••"
200 OK
{
  "rate_plans": []
}

Each item has these fields:

FieldTypeMeaning
iduuidPass it as rate_plan_id when booking
name, descriptionstringAs the hotel wrote them
room_type_iduuid or nullThe one room type it applies to, or null for any
meal_planstring or nullMeals included, as the hotel set it
refundablebooleanfalse for a non-refundable plan
defaultbooleanThe hotel's default plan
activebooleanWhether it is on sale
min_stay_nightsintegerShortest stay (at least 1)
max_stay_nightsinteger or nullLongest stay, if any
cancellation_policy_iduuid or nullIts own cancellation policy; null means the hotel's default applies. See policies

Errors

StatusWhen
403The app token lacks rooms:read
404Property not found

List units

GET/properties/{property_id}/units
Scope rooms:readOperation unit.list

Returns 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

property_id uuid (path)required
The property.

Example

Request
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/units" \
  -H "Authorization: Bearer cbk_••••"
200 OK
{
  "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

StatusWhen
403The app token lacks rooms:read
404Property not found

List extras

GET/properties/{property_id}/extras
Scope rooms:readOperation extra.list

Returns 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

property_id uuid (path)required
The property.

Example

Request
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/extras" \
  -H "Authorization: Bearer cbk_••••"
200 OK
{
  "extras": []
}

Each item has these fields:

FieldTypeMeaning
iduuidPass it as extra_id
name, descriptionstringAs the hotel wrote them
pricenumberThe price of one
unitstringHow it is charged: per_stay, per_night, per_person or per_person_per_night
currencystringThe 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

StatusWhen
403The app token lacks rooms:read
404Property not found

Get policies

GET/properties/{property_id}/policies
Scope property:readOperation policy.get

Returns 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

property_id uuid (path)required
The property.

Example

Request
curl -X GET "https://api.chatbeds.app/partner/v1/properties/19306340-c7cf-465a-93d3-0b7873a7e85d/policies" \
  -H "Authorization: Bearer cbk_••••"
200 OK
{
  "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
}
FieldMeaning
tax.rateA percentage, for example 8.875
tax.included_in_pricestrue: 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_idThe 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

StatusWhen
403The app token lacks property:read
404Property not found

Building something?

On this page