Réservation
La chambre, le type de pension et le tarif choisis par le client sont transmis à HMS dans une structure BookingPushRQ. Le même endpoint gère les annulations et les modifications : il suffit d’envoyer type avec la valeur Cancel ou Modify. Le processus de bout en bout est décrit dans le guide Flux de réservation.
Transmettre une réservation (BookingPushRQ)#
/external/online/channel/bookingAuthentification: Authorization: Bearer · Corps: application/json
Enregistre une ou plusieurs réservations dans HMS. ID est le code de réservation unique généré de votre côté ; envoyer Modify avec le même ID met à jour l’enregistrement, Cancel l’annule. Lorsque plusieurs chambres du même type de chambre et du même type de pension sont vendues, chaque chambre forme un élément RoomStays distinct, avec NumberOfUnits 1, 2, 3…
Pour le type de paiement carte de crédit (9), les données de carte sont envoyées sous PaymentCard ; omettez ce champ pour les autres types de paiement. Manipuler des données de carte vous place dans le périmètre PCI DSS.
Corps de la requête
BookingPushRQ.Bookings[]object[]obligatoirehotelIDstringobligatoireIDstringobligatoiretypestringobligatoireBookModifyCancelcreateDateTimedatetimecheckinDate / checkoutDatedateobligatoireYYYY-MM-DD.RoomStays[]object[]obligatoireroomTypeIDstringobligatoireitems[].id issu de la liste des chambres.roomNamestringratePlanIDstringobligatoireaccommodationTypes[].id issu de la liste des chambres.ratePlanNamestringtypestringBookModifyCancelNumberOfUnitsstringobligatoirecheckinDate / checkoutDatedateobligatoireGuestCountobjectobligatoireadult) et d’enfants (child).PerDayRatesobjectcurrency et PerDayRate[] : stayDate, baseRate, hotelServiceFees.TotalobjectobligatoireamountAfterTaxes, amountOfTaxes, currency.PaymentCardobjectCardHolder{fullname, address, country, city}, cardNumber, expireDate (MMYY), cardCode, seriesCode (CVV).PrimaryGuests[]object[]obligatoirename, surname, PhoneNumber, email, CountryCode.ChildGuests[]object[]age est obligatoire ; name, surname, year, date et detail sont facultatifs.SpecialRequest[]object[]text. Concaténées dans les remarques de la réservation.extras[]object[]name, note, person, piece, price, priceMode, priceTotal, stockID (id issu de la liste des forfaits).TotalobjectobligatoireamountAfterTaxes, amountOfTaxes, extraTotal, currency.Réponse
200 Objet BookingPushRS. En cas de succès, Success: true et l’identifiant de réservation HMS (HMS_ID) ; en cas d’échec, un message Error et BookingConfirmNumbers[].Error[].
Réponses d’erreur
- 200
Error: No available data could be found. (01, corps vide ou illisible) · Hotel registration not found on HMS. (02, hôtel non relié au canal en ligne) · 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": "Chambre standard",
"ratePlanID": "2",
"ratePlanName": "Petit-déjeuner inclus",
"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": "Arrivée tardive, vers 23 h."
}
],
"extras": [
{
"name": "Dîner",
"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": "Chambre standard",
"ratePlanID": "2",
"ratePlanName": "Petit-déjeuner inclus",
"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": "Arrivée tardive, vers 23 h."
}
],
"extras": [
{
"name": "Dîner",
"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' => 'Chambre standard',
'ratePlanID' => '2',
'ratePlanName' => 'Petit-déjeuner inclus',
'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' => 'Arrivée tardive, vers 23 h.',
],
],
'extras' => [
[
'name' => 'Dîner',
'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."
}
]
}
]
}
}