Phòng và giá
Hai endpoint cung cấp dữ liệu cho kết quả tìm kiếm của công cụ đặt phòng: danh sách phòng trả về các loại phòng có thể bán, gói ăn và giá cho ngày và số khách đã chọn; phòng trống trả về tình trạng phòng trống và giá theo từng ngày cho giao diện lịch.
/external/online/roomTypeDanh sách phòng và giáGET/external/room/type/hotel/availabilityPhòng trống theo lịchDanh sách phòng và giá#
/external/online/roomTypeXác thực: Authorization: Bearer · Nội dung: application/x-www-form-urlencoded hoặc multipart/form-data
Trả về các loại phòng của khách sạn đang mở bán trực tuyến cho ngày và số khách đã chọn. Với mỗi loại phòng, hệ thống tính số phòng còn trống (roomCount), các hạn chế (thời gian lưu trú tối thiểu, đóng nhận phòng/trả phòng), gói ăn và các lựa chọn giá. Nếu có trẻ em đi cùng, hãy gửi tuổi của trẻ bằng childAges[]; giá cho trẻ em phụ thuộc vào độ tuổi.
Quy tắc kiểm tra: ngày nhận phòng từ hôm nay trở đi, ngày trả phòng sau ngày nhận phòng, tối đa 30 đêm, 1–40 người lớn, 0–10 trẻ em (0–16 tuổi).
Trường form
hotelIDintegerbắt buộcstartDatedatebắt buộcYYYY-MM-DD.endDatedatebắt buộcYYYY-MM-DD.adultCountintegerbắt buộcchildCountintegermặc định: 0childAges, độ dài của danh sách tuổi được ưu tiên.childAges[]integer[]childAges[]=7&childAges[]=12.languagestringmặc định: trbuildingIDintegerPhản hồi
200 Danh sách loại phòng. Giá nằm dưới mỗi gói ăn trong đối tượng prices, với khóa dạng "<persons>-<1|0>": -1 là giá tiêu chuẩn (được hoàn tiền), -0 là giá không hoàn tiền ([NR]). Với giá theo phòng, khóa là 1-1 / 1-0.
items[].id / nameinteger / stringroomTypeID khi đặt phòng.items[].capacityAdult / capacityChildren / capacityTotalintegeritems[].roomCountintegerroomRestrictionMessage.items[].roomRestrictionMessagestring | nullclosed_to_checkinclosed_to_checkoutpassive_salesminimum_staymaximum_stayclosed_to_arrivalprice_not_founditems[].nonRefundable / refundablebooleanitems[].images[]string[]items[].accommodationTypes[]object[]id trở thành ratePlanID khi đặt phòng. priceType: 0 giá theo người, 1 giá theo phòng.…accommodationTypes[].prices{}objecttotal số đêm, price tổng tiền, currency, nonRefundable ("[NR]" nghĩa là không hoàn tiền), id ID lựa chọn, prices[] giá theo đêm (price, tarih dạng dd.mm.yyyy).items[].roomFeatures[]object[]title, icon.countintegererrorMessage / errorCodestring | integer | nullPhản hồi lỗi
- 200
errorCode10001 không tìm thấy khách sạn · 10002 thiếu tham số · 10003 khách sạn đóng bán trực tuyến · 10004 không có loại phòng nào mở bán · 10022 tham số ngày/số khách không hợp lệ · 20001–20004 không đủ phòng trống.
curl "https://test.hms.gen.tr/external/online/roomType" \
-H "Authorization: Bearer $HMS_TOKEN" \
-d "hotelID=1000" \
-d "startDate=2026-08-18" \
-d "endDate=2026-08-20" \
-d "adultCount=2" \
-d "childCount=1" \
-d "childAges[]=7" \
-d "language=tr"const res = await fetch("https://test.hms.gen.tr/external/online/roomType", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.HMS_TOKEN}`
},
body: new URLSearchParams([
["hotelID", "1000"],
["startDate", "2026-08-18"],
["endDate", "2026-08-20"],
["adultCount", "2"],
["childCount", "1"],
["childAges[]", "7"],
["language", "tr"]
])
});
const data = await res.json();$ch = curl_init('https://test.hms.gen.tr/external/online/roomType');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('HMS_TOKEN'),
],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'hotelID' => '1000',
'startDate' => '2026-08-18',
'endDate' => '2026-08-20',
'adultCount' => '2',
'childCount' => '1',
'childAges' => [
'7',
],
'language' => 'tr',
]),
]);
$data = json_decode(curl_exec($ch), true);{
"success": true,
"items": [
{
"id": 2,
"name": "Phòng Tiêu chuẩn",
"capacityAdult": 2,
"capacityTotal": 3,
"totalBed": 1,
"totalBathroom": 1,
"roomSize": 24,
"currency": "TRY",
"detail": "<p>Phòng tiêu chuẩn 24 m², hướng vườn.</p>",
"roomCount": 5,
"roomRestrictionMessage": null,
"nonRefundable": false,
"refundable": true,
"images": [
"images/1000/odatipi/standart-1.jpg",
"images/1000/odatipi/standart-2.jpg"
],
"accommodationTypes": [
{
"id": 2,
"title": "Bao gồm bữa sáng",
"priceType": 0,
"roomRestriction": 1,
"roomRestrictionMessage": null,
"roomRestrictionValue": null,
"prices": {
"2-1": {
"total": 2,
"title": 2,
"nonRefundable": "",
"price": "1930.00",
"currency": "TRY",
"id": "2/2",
"prices": [
{
"price": "965.00",
"tarih": "18.08.2026"
},
{
"price": "965.00",
"tarih": "19.08.2026"
}
]
},
"2-0": {
"total": 2,
"title": 2,
"nonRefundable": "[NR]",
"price": "1737.00",
"currency": "TRY",
"id": "2-0/2",
"prices": [
{
"price": "868.50",
"tarih": "18.08.2026"
},
{
"price": "868.50",
"tarih": "19.08.2026"
}
]
}
}
}
],
"roomFeatures": [
{
"title": "Điều hòa",
"icon": "fa-snowflake"
},
{
"title": "Wi-Fi miễn phí",
"icon": "fa-wifi"
}
],
"capacityChildren": 1
}
],
"count": 1,
"errorMessage": null,
"errorCode": null
}{
"success": false,
"errorMessage": "Không đủ phòng trống cho người lớn.",
"errorCode": 20001
}Phòng trống theo lịch#
/external/room/type/hotel/availabilityXác thực: Authorization: Bearer
Trả về số phòng còn trống và giá cơ bản theo từng ngày cho mỗi loại phòng. Được thiết kế cho giao diện lịch và bản đồ nhiệt giá; để có giá chính xác và kiểm tra hạn chế, hãy dùng danh sách phòng.
Tham số truy vấn
hotelIDintegerbắt buộcstartDatedatetimebắt buộcYYYY-MM-DD hoặc YYYY-MM-DDTHH:MM:SS.endDatedatetimebắt buộcPhản hồi
200 Danh sách theo ngày cho từng loại phòng. availability -1 nghĩa là không có dữ liệu phòng trống cho ngày đó; price "-" nghĩa là chưa thiết lập giá.
Phản hồi lỗi
- 200
hotel_id_is_not_found,start_date_is_not_found,end_date_is_not_found— thiếu tham số.
curl "https://test.hms.gen.tr/external/room/type/hotel/availability?hotelID=1000&startDate=2026-08-18&endDate=2026-08-21" \
-H "Authorization: Bearer $HMS_TOKEN"const res = await fetch("https://test.hms.gen.tr/external/room/type/hotel/availability?hotelID=1000&startDate=2026-08-18&endDate=2026-08-21", {
headers: {
"Authorization": `Bearer ${process.env.HMS_TOKEN}`
}
});
const data = await res.json();$ch = curl_init('https://test.hms.gen.tr/external/room/type/hotel/availability?hotelID=1000&startDate=2026-08-18&endDate=2026-08-21');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('HMS_TOKEN'),
],
]);
$data = json_decode(curl_exec($ch), true);{
"success": true,
"roomTypes": [
{
"name": "Phòng Tiêu chuẩn",
"id": 2,
"rate": 2,
"availability": [
{
"id": 20260818,
"start": "2026-08-18 12:00:00",
"end": "2026-08-19 12:00:00",
"availability": 5,
"price": "965.00"
},
{
"id": 20260819,
"start": "2026-08-19 12:00:00",
"end": "2026-08-20 12:00:00",
"availability": 3,
"price": "965.00"
},
{
"id": 20260820,
"start": "2026-08-20 12:00:00",
"end": "2026-08-21 12:00:00",
"availability": 0,
"price": "1,100.00"
},
{
"id": 20260821,
"start": "2026-08-21 12:00:00",
"end": "2026-08-22 12:00:00",
"availability": -1,
"price": "-"
}
]
}
],
"currency": "TRY"
}