Démarrage rapide
Sur cette page, vous allez obtenir un jeton avec vos identifiants partenaire, puis envoyer une requête de chambres et tarifs. Il vous faut une apiKey, un apiSecret et l’identifiant HMS de l’hôtel (hotelID) ; si vous ne les avez pas encore, contactez le support.
1. Obtenir un jeton#
L’endpoint de connexion attend des champs de formulaire et ne nécessite aucun en-tête d’authentification :
curl "https://test.hms.gen.tr/external/public/login" \
-d "apiKey=$HMS_API_KEY" \
-d "apiSecret=$HMS_API_SECRET" \
-d "hotelCode=1000"{
"success": true,
"hotelCode": "1000",
"token": "eyJlbmREYXRlIjp7ImRhdGUiOiIyMDI2LTA5LTE1IDEwOjI0OjMxLjAwMDAwMCIs…",
"hotelSeoUrl": "demo-otel"
}Conservez le token : il servira pendant 7 jours pour toutes les requêtes concernant cet hôtel.
export HMS_TOKEN="eyJlbmREYXRlIjp7ImRhdGUiOiIyMDI2LTA5LTE1IDEwOjI0OjMxLjAwMDAwMCIs…"2. Interroger les chambres et les tarifs#
Une recherche de deux nuits pour deux adultes :
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 "language=en"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",
language: "en"
})
});
const data = await res.json();
if (!data.success) throw new Error(`${data.errorCode}: ${data.errorMessage}`);
for (const room of data.items) {
console.log(room.name, room.roomCount, "rooms");
}$ch = curl_init('https://test.hms.gen.tr/external/online/roomType');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('HMS_TOKEN')],
CURLOPT_POSTFIELDS => http_build_query([
'hotelID' => 1000,
'startDate' => '2026-08-18',
'endDate' => '2026-08-20',
'adultCount' => 2,
'language' => 'en',
]),
]);
$data = json_decode(curl_exec($ch), true);
if (empty($data['success'])) {
throw new RuntimeException($data['errorCode'] . ': ' . $data['errorMessage']);
}
foreach ($data['items'] as $room) {
echo $room['name'], ' · ', $room['roomCount'], " rooms\n";
}3. Lire la réponse#
Chaque type de chambre contient ses types de pension (accommodationTypes), et chaque type de pension ses options de prix (prices). Voici un extrait :
{
"success": true,
"items": [
{
"id": 2,
"name": "Standard Room",
"roomCount": 5,
"currency": "TRY",
"accommodationTypes": [
{
"id": 2,
"title": "Bed & Breakfast",
"priceType": 0,
"prices": {
"2-1": {
"total": 2,
"price": "1930.00",
"currency": "TRY",
"nonRefundable": "",
"id": "2/2"
},
"2-0": {
"total": 2,
"price": "1737.00",
"currency": "TRY",
"nonRefundable": "[NR]",
"id": "2-0/2"
}
}
}
]
}
],
"count": 1
}2-1: 2 personnes, tarif standard (remboursable).2-0: 2 personnes, tarif non remboursable (nonRefundable: "[NR]").priceest le total du séjour ;totalest le nombre de nuits. Les tarifs par nuit figurent dans le tableauprices[]de la réponse complète.- Dans la réservation, l’
iddu type de chambre est envoyé commeroomTypeIDet l’iddu type de pension commeratePlanID.
Et ensuite#
- Flux de réservation — de la sélection à la transmission
BookingPushRQ - Flux de paiement — paiement à l’hôtel, virement bancaire, carte de crédit, paiement en ligne
- Codes d’erreur — valeurs
errorCodeetmessage