Đặt phòng
Phòng, gói ăn và giá mà khách đã chọn được gửi đến HMS theo cấu trúc BookingPushRQ. Cùng endpoint này cũng xử lý việc hủy và sửa đổi khi bạn gửi type là Cancel hoặc Modify. Xem hướng dẫn Luồng đặt phòng để biết toàn bộ quy trình.
Gửi đặt phòng (BookingPushRQ)#
/external/online/channel/bookingXác thực: Authorization: Bearer · Nội dung: application/json
Ghi một hoặc nhiều đặt phòng vào HMS. ID là mã đặt phòng duy nhất do phía bạn tạo; gửi Modify với cùng ID sẽ cập nhật bản ghi, gửi Cancel sẽ hủy bản ghi. Khi bán nhiều phòng cùng loại phòng và gói ăn, mỗi phòng là một mục RoomStays riêng với NumberOfUnits 1, 2, 3…
Với hình thức thanh toán thẻ tín dụng (9), thông tin thẻ được đặt trong PaymentCard; bỏ trường này với các hình thức thanh toán khác. Khi xử lý dữ liệu thẻ, bạn thuộc phạm vi áp dụng của PCI DSS.
Nội dung yêu cầu
BookingPushRQ.Bookings[]object[]bắt buộchotelIDstringbắt buộcIDstringbắt buộctypestringbắt buộcBookModifyCancelcreateDateTimedatetimecheckinDate / checkoutDatedatebắt buộcYYYY-MM-DD.RoomStays[]object[]bắt buộcroomTypeIDstringbắt buộcitems[].id từ danh sách phòng.roomNamestringratePlanIDstringbắt buộcaccommodationTypes[].id từ danh sách phòng.ratePlanNamestringtypestringBookModifyCancelNumberOfUnitsstringbắt buộccheckinDate / checkoutDatedatebắt buộcGuestCountobjectbắt buộcadult và child.PerDayRatesobjectcurrency và PerDayRate[]: stayDate, baseRate, hotelServiceFees.Totalobjectbắt buộcamountAfterTaxes, amountOfTaxes, currency.PaymentCardobjectCardHolder{fullname, address, country, city}, cardNumber, expireDate (MMYY), cardCode, seriesCode (CVV).PrimaryGuests[]object[]bắt buộcname, surname, PhoneNumber, email, CountryCode.ChildGuests[]object[]age là bắt buộc; name, surname, year, date, detail là tùy chọn.SpecialRequest[]object[]text. Được nối vào phần ghi chú của đặt phòng.extras[]object[]name, note, person, piece, price, priceMode, priceTotal, stockID (id từ danh sách gói dịch vụ).Totalobjectbắt buộcamountAfterTaxes, amountOfTaxes, extraTotal, currency.Phản hồi
200 Đối tượng BookingPushRS. Khi thành công có Success: true và ID đặt phòng trong HMS (HMS_ID); khi thất bại có thông báo Error và BookingConfirmNumbers[].Error[].
Phản hồi lỗi
- 200
Error: No available data could be found. (01, nội dung trống hoặc không phân tích được) · Hotel registration not found on HMS. (02, khách sạn chưa liên kết với kênh trực tuyến) · Could not register. · Failed to parse information.
curl -X POST "https://test.hms.gen.tr/external/online/channel/booking" \
-H "Authorization: Bearer $HMS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"BookingPushRQ": {
"Bookings": [
{
"hotelID": "1000",
"ID": "4811174883",
"type": "Book",
"createDateTime": "2026-08-01T08:32:11:293Z",
"checkinDate": "2026-08-18",
"checkoutDate": "2026-08-20",
"RoomStays": [
{
"roomTypeID": "2",
"roomName": "Phòng Tiêu chuẩn",
"ratePlanID": "2",
"ratePlanName": "Bao gồm bữa sáng",
"type": "Book",
"NumberOfUnits": "1",
"checkinDate": "2026-08-18",
"checkoutDate": "2026-08-20",
"GuestCount": {
"adult": 2,
"child": 1
},
"PerDayRates": {
"currency": "TRY",
"PerDayRate": [
{
"stayDate": "2026-08-18",
"baseRate": "965.00",
"hotelServiceFees": "0"
},
{
"stayDate": "2026-08-19",
"baseRate": "965.00",
"hotelServiceFees": "0"
}
]
},
"Total": {
"amountAfterTaxes": "1930.00",
"amountOfTaxes": "175.45",
"currency": "TRY"
}
}
],
"PrimaryGuests": [
{
"name": "Ayşe",
"surname": "Demir",
"PhoneNumber": "+905551112233",
"email": "[email protected]",
"CountryCode": "TR"
}
],
"ChildGuests": [
{
"age": 7
}
],
"SpecialRequest": [
{
"text": "Nhận phòng muộn, khoảng 23:00."
}
],
"extras": [
{
"name": "Bữa tối",
"note": "",
"person": 2,
"piece": 1,
"price": "400.00",
"priceMode": null,
"priceTotal": "400.00",
"stockID": 12
}
],
"Total": {
"amountAfterTaxes": "2330.00",
"amountOfTaxes": "211.82",
"extraTotal": "400.00",
"currency": "TRY"
}
}
]
}
}'const res = await fetch("https://test.hms.gen.tr/external/online/channel/booking", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.HMS_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"BookingPushRQ": {
"Bookings": [
{
"hotelID": "1000",
"ID": "4811174883",
"type": "Book",
"createDateTime": "2026-08-01T08:32:11:293Z",
"checkinDate": "2026-08-18",
"checkoutDate": "2026-08-20",
"RoomStays": [
{
"roomTypeID": "2",
"roomName": "Phòng Tiêu chuẩn",
"ratePlanID": "2",
"ratePlanName": "Bao gồm bữa sáng",
"type": "Book",
"NumberOfUnits": "1",
"checkinDate": "2026-08-18",
"checkoutDate": "2026-08-20",
"GuestCount": {
"adult": 2,
"child": 1
},
"PerDayRates": {
"currency": "TRY",
"PerDayRate": [
{
"stayDate": "2026-08-18",
"baseRate": "965.00",
"hotelServiceFees": "0"
},
{
"stayDate": "2026-08-19",
"baseRate": "965.00",
"hotelServiceFees": "0"
}
]
},
"Total": {
"amountAfterTaxes": "1930.00",
"amountOfTaxes": "175.45",
"currency": "TRY"
}
}
],
"PrimaryGuests": [
{
"name": "Ayşe",
"surname": "Demir",
"PhoneNumber": "+905551112233",
"email": "[email protected]",
"CountryCode": "TR"
}
],
"ChildGuests": [
{
"age": 7
}
],
"SpecialRequest": [
{
"text": "Nhận phòng muộn, khoảng 23:00."
}
],
"extras": [
{
"name": "Bữa tối",
"note": "",
"person": 2,
"piece": 1,
"price": "400.00",
"priceMode": null,
"priceTotal": "400.00",
"stockID": 12
}
],
"Total": {
"amountAfterTaxes": "2330.00",
"amountOfTaxes": "211.82",
"extraTotal": "400.00",
"currency": "TRY"
}
}
]
}
})
});
const data = await res.json();$ch = curl_init('https://test.hms.gen.tr/external/online/channel/booking');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('HMS_TOKEN'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'BookingPushRQ' => [
'Bookings' => [
[
'hotelID' => '1000',
'ID' => '4811174883',
'type' => 'Book',
'createDateTime' => '2026-08-01T08:32:11:293Z',
'checkinDate' => '2026-08-18',
'checkoutDate' => '2026-08-20',
'RoomStays' => [
[
'roomTypeID' => '2',
'roomName' => 'Phòng Tiêu chuẩn',
'ratePlanID' => '2',
'ratePlanName' => 'Bao gồm bữa sáng',
'type' => 'Book',
'NumberOfUnits' => '1',
'checkinDate' => '2026-08-18',
'checkoutDate' => '2026-08-20',
'GuestCount' => [
'adult' => 2,
'child' => 1,
],
'PerDayRates' => [
'currency' => 'TRY',
'PerDayRate' => [
[
'stayDate' => '2026-08-18',
'baseRate' => '965.00',
'hotelServiceFees' => '0',
],
[
'stayDate' => '2026-08-19',
'baseRate' => '965.00',
'hotelServiceFees' => '0',
],
],
],
'Total' => [
'amountAfterTaxes' => '1930.00',
'amountOfTaxes' => '175.45',
'currency' => 'TRY',
],
],
],
'PrimaryGuests' => [
[
'name' => 'Ayşe',
'surname' => 'Demir',
'PhoneNumber' => '+905551112233',
'email' => '[email protected]',
'CountryCode' => 'TR',
],
],
'ChildGuests' => [
[
'age' => 7,
],
],
'SpecialRequest' => [
[
'text' => 'Nhận phòng muộn, khoảng 23:00.',
],
],
'extras' => [
[
'name' => 'Bữa tối',
'note' => '',
'person' => 2,
'piece' => 1,
'price' => '400.00',
'priceMode' => null,
'priceTotal' => '400.00',
'stockID' => 12,
],
],
'Total' => [
'amountAfterTaxes' => '2330.00',
'amountOfTaxes' => '211.82',
'extraTotal' => '400.00',
'currency' => 'TRY',
],
],
],
],
]),
]);
$data = json_decode(curl_exec($ch), true);{
"BookingPushRS": {
"Success": true,
"BookingConfirmNumbers": [
{
"confirmTime": 1755500000,
"bookingID": 48213,
"bookingType": "Book",
"HMS_ID": 48213
}
]
}
}{
"BookingPushRS": {
"Error": "Hotel registration not found on HMS.",
"BookingConfirmNumbers": [
{
"bookingID": null,
"bookingType": null,
"confirmTime": 1755500000,
"Error": [
{
"code": "02",
"text": "Hotel registration not found on HMS."
}
]
}
]
}
}