Camere și tarife
Două endpointuri care alimentează rezultatele căutării din motorul de rezervări: lista de camere, care returnează tipurile de camere vandabile, tipurile de masă și prețurile pentru datele și numărul de persoane indicate, și disponibilitatea, care returnează disponibilitatea și tarifele zi cu zi pentru afișarea în calendar.
/external/online/roomTypeLista de camere și tarifeGET/external/room/type/hotel/availabilityDisponibilitate în calendarLista de camere și tarife#
/external/online/roomTypeAutentificare: Authorization: Bearer · Corp: application/x-www-form-urlencoded sau multipart/form-data
Returnează tipurile de camere ale hotelului deschise pentru vânzarea online, pentru datele și numărul de persoane indicate. Pentru fiecare tip de cameră se calculează numărul de camere disponibile (roomCount), restricțiile (sejur minim, închis pentru check-in/check-out), tipurile de masă și opțiunile de preț. Dacă sunt și copii, trimiteți vârstele lor în childAges[]; prețul pentru copii depinde de vârstă.
Reguli de validare: check-in astăzi sau mai târziu, check-out după check-in, cel mult 30 de nopți, între 1 și 40 de adulți, între 0 și 10 copii (vârste 0–16).
Câmpuri de formular
hotelIDintegerobligatoriustartDatedateobligatoriuYYYY-MM-DD.endDatedateobligatoriuYYYY-MM-DD.adultCountintegerobligatoriuchildCountintegerimplicit: 0childAges, prevalează lungimea listei de vârste.childAges[]integer[]childAges[]=7&childAges[]=12.languagestringimplicit: trbuildingIDintegerRăspuns
200 Lista tipurilor de camere. Prețurile se află sub fiecare tip de masă, în obiectul prices, cu chei de forma "<persons>-<1|0>": -1 este tariful standard (rambursabil), -0 tariful nerambursabil ([NR]). La tarifarea pe cameră, cheile sunt 1-1 / 1-0.
items[].id / nameinteger / stringroomTypeID în rezervare.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 devine ratePlanID în rezervare. priceType: 0 preț pe persoană, 1 preț pe cameră.…accommodationTypes[].prices{}objecttotal numărul de nopți, price suma totală, currency, nonRefundable ("[NR]" înseamnă nerambursabil), id ID-ul selecției, prices[] tarifele pe noapte (price, tarih în formatul zz.ll.aaaa).items[].roomFeatures[]object[]title, icon.countintegererrorMessage / errorCodestring | integer | nullRăspunsuri de eroare
- 200
errorCode10001 hotel negăsit · 10002 parametru lipsă · 10003 hotel închis pentru vânzarea online · 10004 niciun tip de cameră deschis pentru vânzare · 10022 parametri de dată/număr de persoane nevalizi · 20001–20004 disponibilitate insuficientă.
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": "Cameră Standard",
"capacityAdult": 2,
"capacityTotal": 3,
"totalBed": 1,
"totalBathroom": 1,
"roomSize": 24,
"currency": "TRY",
"detail": "<p>Cameră standard de 24 m², cu vedere spre grădină.</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": "Mic dejun inclus",
"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": "Aer condiționat",
"icon": "fa-snowflake"
},
{
"title": "Wi-Fi gratuit",
"icon": "fa-wifi"
}
],
"capacityChildren": 1
}
],
"count": 1,
"errorMessage": null,
"errorCode": null
}{
"success": false,
"errorMessage": "Disponibilitate insuficientă pentru adulți.",
"errorCode": 20001
}Disponibilitate în calendar#
/external/room/type/hotel/availabilityAutentificare: Authorization: Bearer
Returnează, pentru fiecare tip de cameră, numărul de camere disponibile și tariful de bază pe zi. Conceput pentru afișarea în calendar și pentru hărți termice ale tarifelor; pentru prețuri exacte și verificarea restricțiilor folosiți lista de camere.
Parametri de interogare
hotelIDintegerobligatoriustartDatedatetimeobligatoriuYYYY-MM-DD sau YYYY-MM-DDTHH:MM:SS.endDatedatetimeobligatoriuRăspuns
200 Listă zilnică pe tip de cameră. availability -1 înseamnă că nu există date de disponibilitate pentru ziua respectivă; price "-" înseamnă că nu este definit niciun tarif.
Răspunsuri de eroare
- 200
hotel_id_is_not_found,start_date_is_not_found,end_date_is_not_found— parametru lipsă.
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": "Cameră Standard",
"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"
}