Kamar dan tarif
Dua endpoint yang menyediakan data untuk hasil pencarian booking engine: daftar kamar, yang mengembalikan tipe kamar yang dapat dijual, meal plan, dan harga untuk tanggal dan jumlah tamu yang diberikan, serta ketersediaan, yang mengembalikan ketersediaan dan tarif per hari untuk tampilan kalender.
/external/online/roomTypeDaftar kamar dan tarifGET/external/room/type/hotel/availabilityKetersediaan kalenderDaftar kamar dan tarif#
/external/online/roomTypeAutentikasi: Authorization: Bearer · Body: application/x-www-form-urlencoded atau multipart/form-data
Mengembalikan tipe kamar hotel yang dibuka untuk penjualan online pada tanggal dan jumlah tamu yang diberikan. Untuk setiap tipe kamar, sistem menghitung jumlah kamar tersedia (roomCount), batasan (minimum lama menginap, tertutup untuk check-in/check-out), meal plan, dan opsi harga. Jika ada anak-anak, kirim usia mereka dengan childAges[]; harga anak bergantung pada usia.
Aturan validasi: check-in hari ini atau setelahnya, check-out setelah check-in, maksimal 30 malam, 1–40 dewasa, 0–10 anak (usia 0–16).
Field form
hotelIDintegerwajibstartDatedatewajibYYYY-MM-DD.endDatedatewajibYYYY-MM-DD.adultCountintegerwajibchildCountintegerdefault: 0childAges, panjang daftar usia yang digunakan.childAges[]integer[]childAges[]=7&childAges[]=12.languagestringdefault: trbuildingIDintegerRespons
200 Daftar tipe kamar. Harga berada di bawah setiap meal plan dalam objek prices, dengan kunci "<persons>-<1|0>": -1 adalah tarif standar (dapat di-refund), -0 tarif tidak dapat di-refund ([NR]). Pada harga per kamar, kuncinya adalah 1-1 / 1-0.
items[].id / nameinteger / stringroomTypeID dalam reservasi.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 menjadi ratePlanID dalam reservasi. priceType: 0 harga per orang, 1 harga per kamar.…accommodationTypes[].prices{}objecttotal jumlah malam, price jumlah total, currency, nonRefundable ("[NR]" berarti tidak dapat di-refund), id ID pilihan, prices[] tarif per malam (price, tarih dalam format dd.mm.yyyy).items[].roomFeatures[]object[]title, icon.countintegererrorMessage / errorCodestring | integer | nullRespons error
- 200
errorCode10001 hotel tidak ditemukan · 10002 parameter tidak ada · 10003 hotel ditutup untuk penjualan online · 10004 tidak ada tipe kamar yang dibuka untuk dijual · 10022 parameter tanggal/jumlah tamu tidak valid · 20001–20004 ketersediaan tidak mencukupi.
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": "Kamar Standar",
"capacityAdult": 2,
"capacityTotal": 3,
"totalBed": 1,
"totalBathroom": 1,
"roomSize": 24,
"currency": "TRY",
"detail": "<p>Kamar standar 24 m² dengan pemandangan taman.</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": "Termasuk Sarapan",
"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": "AC",
"icon": "fa-snowflake"
},
{
"title": "Wi-Fi Gratis",
"icon": "fa-wifi"
}
],
"capacityChildren": 1
}
],
"count": 1,
"errorMessage": null,
"errorCode": null
}{
"success": false,
"errorMessage": "Ketersediaan untuk dewasa tidak mencukupi.",
"errorCode": 20001
}Ketersediaan kalender#
/external/room/type/hotel/availabilityAutentikasi: Authorization: Bearer
Mengembalikan jumlah kamar tersedia dan tarif dasar per hari untuk setiap tipe kamar. Dirancang untuk tampilan kalender dan heat map tarif; gunakan daftar kamar untuk harga pasti dan pemeriksaan batasan.
Parameter kueri
hotelIDintegerwajibstartDatedatetimewajibYYYY-MM-DD atau YYYY-MM-DDTHH:MM:SS.endDatedatetimewajibRespons
200 Daftar harian per tipe kamar. availability -1 berarti tidak ada data ketersediaan untuk hari itu; price "-" berarti tarif belum ditentukan.
Respons error
- 200
hotel_id_is_not_found,start_date_is_not_found,end_date_is_not_found— parameter tidak ada.
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": "Kamar Standar",
"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"
}