Girişe dön

API & Entegrasyon

reservation.com API'si ile otel arama, rezervasyon, ödeme ve iptal süreçlerini kendi sisteminize entegre edebilirsiniz. Aşağıda uçtan uca entegrasyon akışı ve teknik adımlar yer almaktadır.

Canlı API dokümanı core-api.reserwation.com

Entegrasyon Akışı

1
Kimlik Doğrulama
2
Otel Arama
3
Müsaitlik
4
Yolcu Bilgileri
5
Sepete Ekleme
6
Rezervasyon
7
Ödeme
8
İptal

Teknik Adımlar

1
Kimlik Doğrulama
POST/api/Auth/get-token
E-posta ve parola ile bir erişim token'ı (JWT) alınır. Dönen accessToken, sonraki tüm isteklerde 'Authorization: Bearer <token>' başlığıyla gönderilir.
2
Otel Arama
POST/api/Hotel/search
Giriş/çıkış tarihi, para birimi, milliyet ve otel/bölge kriterleriyle arama yapılır. Yanıt, her satılabilir teklif için bir priceItemId içerir.
3
Müsaitlik
POST/api/Hotel/availability
Seçilen teklifin (priceItemId) güncel fiyat ve müsaitliği doğrulanır. Rezervasyondan önce bu adım zorunludur; fiyat değiştiyse tekrar arama gerekir.
4
Yolcu Bilgileri
POST/api/Booking/set-customers
Yolcu bilgileri gönderilerek bir sepet oluşturulur. Yanıt, basketId ve her yolcu için customerId döner.
5
Sepete Ekleme
POST/api/Booking/add-hotel
Doğrulanan teklif (priceItemId), odalara yolcu ataması yapılarak sepete (basketId) eklenir.
6
Rezervasyon
POST/api/Booking/create-pre-booking POST/api/Booking/create-succeeded-booking
Sepet, ön rezervasyon (opsiyon) ya da kesin rezervasyon olarak sonuçlandırılır. Yanıt, rezervasyon numarasını (bkgNumber) döner.
7
Ödeme
POST/api/Booking/add-payment
Rezervasyona kısmi veya tam ödeme eklenir. Ödenen tutar rezervasyon tutarına ulaştığında ön rezervasyon otomatik olarak kesin rezervasyona döner.
8
İptal
POST/api/Booking/cancellation-penalty POST/api/Booking/cancel
Önce iptal seçenekleri ve cezası (bkgNumber ile) sorgulanır; seçilen optionId ile iptal gerçekleştirilir.

Önemli Notlar

Tüm istek ve yanıtlar JSON formatındadır ve standart bir zarf yapısı kullanır: { responseStatus, message, data }.
Kimlik doğrulama JWT tabanlıdır; token süresi dolduğunda refresh-token uç noktasıyla yenilenir.
Fiyat ve müsaitlik anlıktır; arama teklifleri kısa ömürlüdür, rezervasyon öncesi müsaitlik kontrolü şarttır.
API taban adresi, rol kullanıcısı bilgileri ve ayrıntılı teknik dokümantasyon için lütfen bizimle iletişime geçin.

İstek Sınırları

Uç noktalar dakikalık kotalarla korunur. Kota, aşağıdaki kapsamda sayılır; kotayı aşan istekler reddedilir.

Uç Nokta Kota
POST /api/Auth/get-token 10 / 5 dk
POST /api/Auth/refresh-token 10 / 5 dk
GET /api/Hotel/autocomplete 120 / 1 dk
POST /api/Hotel/search 60 / 1 dk
POST /api/Hotel/catalog 60 / 1 dk
Kota aşıldığında HTTP 429 döner. Yanıt gövdesi standart zarftır (responseStatus = Warning) ve Retry-After başlığı kaç saniye sonra tekrar denenebileceğini bildirir. İstemcinizin bu başlığa uyması beklenir.

Referans Kodları

API isteklerinde ve yanıtlarında kullanılan sabit değerler. Sayısal kod ile sabit adını birlikte kullanabilirsiniz.

Para Birimi (Currency)
Kod Sabit Açıklama
1 TRY Türk Lirası
2 USD Amerikan Doları
3 EUR Euro
4 GBP İngiliz Sterlini
Dil (Language)
Kod Sabit Açıklama
1 TR Türkçe
2 EN İngilizce
3 ES İspanyolca
Rezervasyon Durumu (BookingState)
Kod Sabit Açıklama
1 PreReservation Ön rezervasyon (opsiyon)
2 SucceededReservation Kesin rezervasyon
3 CanceledBySucceededReservation Kesin rezervasyondan iptal
4 CanceledByPreReservation Ön rezervasyondan iptal
Cinsiyet (Gender)
Kod Sabit Açıklama
1 Male Erkek
2 Female Kadın
Ürün Tipi (ProductType)
Kod Sabit Açıklama
1 Hotel Otel
Arama Tipi (HotelSearchType)
Kod Sabit Açıklama
1 Id Otel kimliği ile arama
2 Hotel Otel
4 State İl / Bölge (tüm il)
5 District Yerleşim (şehir / ilçe / belde)
Sıralama (HotelSearchOrderBy)
Kod Sabit Açıklama
0 PriceAsc Fiyat (artan)
1 PriceDesc Fiyat (azalan)
2 NameAsc Ad (A→Z)
3 NameDesc Ad (Z→A)
4 StarAsc Yıldız (artan)
5 StarDesc Yıldız (azalan)
6 RatingAsc Puan (artan)
7 RatingDesc Puan (azalan)
Ödeme Tipi (PaymentType)
Kod Sabit Açıklama
1 Cash Nakit
2 Current Cari (acente bakiyesi)
3 CreditCard Kredi kartı
4 Transfer Havale / EFT
Yolcu Tipi (PassengerType)
Kod Sabit Açıklama
1 Adult Yetişkin
2 Child Çocuk
3 Infant Bebek
Konfirme Durumu (BookingConfirmState)
Kod Sabit Açıklama
1 Waiting Otelden teyit bekleniyor
2 Confirmed Otel teyit etti (konfirme numarası dolar)
3 NotConfirmed Otel teyit etmedi
4 WaitingChanges Otel değişiklik istiyor

Yanıt Zarfı ve Durum Kodları

Tüm yanıtlar aynı zarf yapısını kullanır. responseStatus alanı JSON'da sayısal değerdir; iş sonucunu buradan kontrol edin (HTTP durum kodundan değil).

{
  "message": "string",
  "responseStatus": 0,
  "data": { ... }
}
responseStatus
Kod Sabit Açıklama
0SuccessBaşarılı
1InfoBilgi
2WarningUyarı (iş kuralı; örn. yetersiz bakiye)
3ErrorHata

Uçtan Uca Rezervasyon Akışı

Aşağıdaki örnekler TEK bir rezervasyonun baştan sona akışıdır: her adımın yanıtındaki kimlik, bir sonraki adımın isteğinde kullanılır. Örnek senaryo: 2 oda (2 yetişkin + 1 çocuk / 1 yetişkin), 4 gece, EUR. Alan adları gerçektir; değerler temsilîdir.

1 Kimlik Doğrulama
Token alma · İstek
POST /api/Auth/get-token
{
  "email": "api-user@example.com",
  "password": "********"
}
Token alma · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6...",
    "expiresAt": "2026-09-01T12:30:00.1234567+03:00",
    "refreshToken": "b7f3c2a1-9d4e-4f21-8a55-..."
  }
}
Sonraki tüm isteklerde token'ı Authorization başlığında gönderin:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6...
Yanıttaki accessToken'ı sonraki tüm isteklerde Authorization başlığında gönderin. Süresi dolduğunda /api/Auth/refresh-token ile yenileyin; oturumu kapatmak için /api/Auth/revoke kullanılır.
2 Otel Arama
Otel arama · İstek
POST /api/Hotel/search
{
  "checkIn": "2026-09-10",
  "checkOut": "2026-09-14",
  "currencyCode": "EUR",
  "nationalityCode": "TR",
  "culture": "tr-TR",
  "showCheapestPrice": true,
  "orderBy": 0,
  "searchTypes": [ { "id": 1000133, "type": 2 } ],
  "rooms": [
    { "adultCount": 2, "childBirthdates": [ "2018-06-10" ] },
    { "adultCount": 1, "childBirthdates": [] }
  ]
}
Otel arama · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": [
    {
      "id": 1000133,
      "name": "Old Stone Hotel Skopje",
      "star": 4,
      "rating": 4.90,
      "countryName": "MAKEDONYA",
      "stateName": "Grad Skopje",
      "districtName": "Skopje",
      "thumbnailUrl": "https://.../hotel-images/1000133/0.jpg",
      "roomTypes": [
        {
          "id": "STD",
          "name": "Standard Room",
          "mealTypes": [
            {
              "id": "RO",
              "name": "Room Only",
              "priceItemId": "3f2a9c7d-5b41-4e88-9a2f-7c6d1e0b4a51",
              "totalPrice": 1240.00,
              "pricePerRoom": 620.00,
              "currencyCode": "EUR",
              "inclusion": "Room Only",
              "promotions": [],
              "cancellationPolicies": [
                {
                  "fromDate": "2026-09-07T00:00:00",
                  "toDate": null,
                  "penaltyAmount": 124.00,
                  "penaltyRate": 10.00,
                  "currencyCode": "EUR",
                  "description": "..."
                }
              ],
              "extraCharges": [
                {
                  "description": "City Tax",
                  "amount": 28.00,
                  "currencyCode": "EUR",
                  "payableAtProperty": true,
                  "roomIndex": 1
                }
              ]
            }
          ]
        }
      ],
      "rateConditions": []
    }
  ]
}
Her teklifin priceItemId değeri, o fiyatın bizdeki token'ıdır ve 3. adıma taşınır. Teklifler kısa ömürlüdür ve yalnız istediğiniz para birimindeki teklifler döner. Arama en fazla 32 günlük konaklama içindir; geçmiş tarih kabul edilmez.
3 Müsaitlik
Müsaitlik kontrolü · İstek
POST /api/Hotel/availability
{
  "priceItemId": "3f2a9c7d-5b41-4e88-9a2f-7c6d1e0b4a51"
}
Müsaitlik kontrolü · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "priceItemId": "3f2a9c7d-5b41-4e88-9a2f-7c6d1e0b4a51",
    "isAvailable": true,
    "priceChanged": false,
    "totalPrice": 1240.00,
    "currencyCode": "EUR",
    "inclusion": "Room Only",
    "promotions": [],
    "amenities": [
      "Smoking and Non-Smoking",
      "Free WiFi",
      "..."
    ],
    "extraCharges": [
      {
        "description": "City Tax",
        "amount": 28.00,
        "currencyCode": "EUR",
        "payableAtProperty": true,
        "roomIndex": 1
      }
    ],
    "rateConditions": [
      "CheckIn Time-Begin: 1:00 PM",
      "Minimum CheckIn Age : 18",
      "..."
    ]
  }
}
isAvailable=false ise teklif düşmüştür; 2. adıma dönüp yeniden arama yapın. totalPrice bu adımda güncellenmiş olabilir — misafire bu tutarı gösterin. priceItemId aynı kalır ve 5. adımda kullanılır.
4 Yolcu Bilgileri
Yolcu bilgileri · İstek
POST /api/Booking/set-customers
{
  "customers": [
    {
      "firstName": "Ahmet",
      "lastName": "Yilmaz",
      "birthDate": "1988-04-12",
      "gender": 1,
      "type": 1,
      "nationality": "TR",
      "identityNumber": "12345678901",
      "passportNo": null,
      "phone": "+905321234567",
      "email": "ahmet.yilmaz@example.com",
      "isLeader": true
    },
    {
      "firstName": "Elif",
      "lastName": "Yilmaz",
      "birthDate": "1990-11-02",
      "gender": 2,
      "type": 1,
      "nationality": "TR",
      "isLeader": false
    },
    {
      "firstName": "Deniz",
      "lastName": "Yilmaz",
      "birthDate": "2018-06-10",
      "gender": 2,
      "type": 2,
      "nationality": "TR",
      "isLeader": false
    },
    {
      "firstName": "Mehmet",
      "lastName": "Demir",
      "birthDate": "1975-01-27",
      "gender": 1,
      "type": 1,
      "nationality": "TR",
      "passportNo": "U12345678",
      "isLeader": false
    }
  ]
}
Yolcu bilgileri · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "basketId": "8c5f1d92-0a37-4c6b-9d55-2e91f4b7c308",
    "customers": [
      { "customerId": "a1e7b3c4-9f20-4d51-8b6a-11c2d3e4f501", "firstName": "Ahmet",  "lastName": "Yilmaz" },
      { "customerId": "b2f8c4d5-8e31-4a62-9c7b-22d3e4f5a602", "firstName": "Elif",   "lastName": "Yilmaz" },
      { "customerId": "c3a9d5e6-7d42-4b73-8a8c-33e4f5a6b703", "firstName": "Deniz",  "lastName": "Yilmaz" },
      { "customerId": "d4b0e6f7-6c53-4c84-9b9d-44f5a6b7c804", "firstName": "Mehmet", "lastName": "Demir" }
    ]
  }
}
Yanıttaki basketId ve her yolcunun customerId değeri 5. adımda kullanılır. Lider yolcuda (isLeader=true) phone ve email zorunludur. Ad ve soyad 2–25 karakter olmalı, yalnız harf, boşluk, kesme ve tire içerebilir (sağlayıcı kuralı). Çocuk yolcunun yaşı ÇIKIŞ (check-out) tarihine göre hesaplanır.
5 Sepete Ekleme
Sepete ekleme · İstek
POST /api/Booking/add-hotel
{
  "basketId": "8c5f1d92-0a37-4c6b-9d55-2e91f4b7c308",
  "priceItemId": "3f2a9c7d-5b41-4e88-9a2f-7c6d1e0b4a51",
  "rooms": [
    {
      "customerIds": [
        "a1e7b3c4-9f20-4d51-8b6a-11c2d3e4f501",
        "b2f8c4d5-8e31-4a62-9c7b-22d3e4f5a602",
        "c3a9d5e6-7d42-4b73-8a8c-33e4f5a6b703"
      ]
    },
    {
      "customerIds": [ "d4b0e6f7-6c53-4c84-9b9d-44f5a6b7c804" ]
    }
  ]
}
Sepete ekleme · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "basketId": "8c5f1d92-0a37-4c6b-9d55-2e91f4b7c308"
  }
}
rooms dizisinin sırası, 2. adımdaki arama isteğinin rooms sırasıyla AYNI olmalıdır; her odaya o odada kalacak yolcuların customerId değerleri yazılır. Aynı sepete birden çok otel kalemi eklenebilir — aynı basketId ile tekrar çağırın.
6 Rezervasyon
Ön rezervasyon · İstek
POST /api/Booking/create-pre-booking
"8c5f1d92-0a37-4c6b-9d55-2e91f4b7c308"
Ön rezervasyon · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "basketId": "8c5f1d92-0a37-4c6b-9d55-2e91f4b7c308",
    "bkgNumber": "20260901412837",
    "bookingId": 1284
  }
}
Kesin rezervasyon · İstek
POST /api/Booking/create-succeeded-booking
"8c5f1d92-0a37-4c6b-9d55-2e91f4b7c308"
Kesin rezervasyon · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "basketId": "8c5f1d92-0a37-4c6b-9d55-2e91f4b7c308",
    "bkgNumber": "20260901412837",
    "bookingId": 1284
  }
}
İstek gövdesi bir nesne DEĞİL, yalnızca tırnak içinde basketId'dir (JSON metni). Ön rezervasyon opsiyon oluşturur ve ödeme tamamlandığında kesine döner; kesin rezervasyon doğrudan satın alır. Yanıttaki bookingId 7. adımda (ödeme), bkgNumber ise 8. adımda (iptal) ve takip uçlarında kullanılır.
7 Ödeme
Kısmi ödeme · İstek
POST /api/Booking/add-payment
{
  "bookingId": 1284,
  "amount": 600.00,
  "paymentType": 2
}
Kısmi ödeme · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "bookingId": 1284,
    "totalAmount": 1240.00,
    "paidAmount": 600.00,
    "remainingAmount": 640.00,
    "isFullyPaid": false,
    "currencyCode": "EUR",
    "confirmedAsDefinite": false,
    "convertMessage": null
  }
}
Kalan ödeme (kesine çevirir) · İstek
POST /api/Booking/add-payment
{
  "bookingId": 1284,
  "amount": 640.00,
  "paymentType": 2
}
Kalan ödeme (kesine çevirir) · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "bookingId": 1284,
    "totalAmount": 1240.00,
    "paidAmount": 1240.00,
    "remainingAmount": 0.00,
    "isFullyPaid": true,
    "currencyCode": "EUR",
    "confirmedAsDefinite": true,
    "convertMessage": null
  }
}
Ödeme parça parça eklenebilir; toplam ödenen tutar rezervasyon tutarına ulaştığında ön rezervasyon otomatik olarak kesine çevrilir (confirmedAsDefinite=true). Cari ödemede (paymentType=2) tutar acente bakiyesinden düşülür; bakiye yetersizse yanıt responseStatus=2 (Uyarı) döner.
8 İptal
İptal cezası önizleme · İstek
POST /api/Booking/cancellation-penalty
{
  "bkgNumber": "20260901412837"
}
İptal cezası önizleme · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "bkgNumber": "20260901412837",
    "isCancelable": true,
    "currencyCode": "EUR",
    "options": [
      {
        "optionId": "DEFAULT",
        "description": "...",
        "penaltyAmount": 124.00,
        "refundAmount": 1116.00,
        "penaltyRate": 10.00
      }
    ]
  }
}
İptal · İstek
POST /api/Booking/cancel
{
  "bkgNumber": "20260901412837",
  "optionId": "DEFAULT"
}
İptal · Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "bkgNumber": "20260901412837",
    "penaltyAmount": 124.00,
    "refundedAmount": 1116.00,
    "currencyCode": "EUR"
  }
}
Önce cancellation-penalty ile seçenekler sorgulanır — bu uç iptal YAPMAZ, yalnız ceza/iade önizlemesi verir. Sonra seçtiğiniz kaydın optionId değeri olduğu gibi cancel isteğine konur (değer opaktır, yorumlamayın); sağlayıcı tek seçenek sunuyorsa DEFAULT gelir. İade acentenin carisine yapılır ve ödenen tutar üzerinden hesaplanır.
Müsaitlik yanıtındaki ek ücretler, dahil olanlar, kampanyalar ve tarife koşulları rezervasyon tamamlanmadan ÖNCE misafire gösterilmelidir. Ek ücretler otelde tahsil edilebilir ve teklifin para biriminden farklı bir para biriminde bildirilebilir; bildirildiği para biriminde, çevrilmeden gösterin. Tarife koşulları düz metindir; HTML olarak yorumlamayın.

Takip ve Yardımcı Uçlar

Akışın parçası değildir; rezervasyon takibi, raporlama ve arama öncesi referans verileri içindir.

Rezervasyon detayı
İstek
POST /api/Booking/get-details
{
  "bkgNumber": "20260901412837"
}
Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "id": 1284,
    "bkgNumber": "20260901412837",
    "bookingStateId": 2,
    "bookingStateName": "Kesin rezervasyon",
    "saleDate": "2026-09-01T09:14:22",
    "totalAmount": 1240.00,
    "currencyCode": "EUR",
    "penaltyAmount": null,
    "cancelDate": null,
    "creatorName": "api-user@example.com",
    "cancelledByName": null,
    "items": [
      {
        "id": 3011,
        "productTypeId": 1,
        "productName": "Old Stone Hotel Skopje",
        "hotelId": 1000133,
        "hotelStar": 4,
        "checkIn": "2026-09-10",
        "checkOut": "2026-09-14",
        "nights": 4,
        "totalPrice": 1240.00,
        "currencyCode": "EUR",
        "bookingConfirmStateId": 2,
        "bookingConfirmStateName": "Onaylandı",
        "confirmationCode": "HTL-99213",
        "confirmLogs": [],
        "rooms": [
          { "id": 5501, "roomTypeName": "Standard Room", "boardName": "Room Only", "totalPrice": 820.00, "currencyCode": "EUR", "adultCount": 2, "childCount": 1 },
          { "id": 5502, "roomTypeName": "Standard Room", "boardName": "Room Only", "totalPrice": 420.00, "currencyCode": "EUR", "adultCount": 1, "childCount": 0 }
        ],
        "hotel": {
          "countryName": "MAKEDONYA",
          "stateName": "Grad Skopje",
          "districtName": "Skopje",
          "address": "Str. Lazar Tanev No. 1, 1000 Skopje",
          "phoneNumber": "+389 2 512 2800",
          "website": "https://oldstonehotel.com.mk/",
          "rating": 4.90
        }
      }
    ],
    "customers": [
      {
        "id": 7801,
        "bookingRoomId": 5501,
        "firstName": "Ahmet",
        "lastName": "Yilmaz",
        "birthDate": "1988-04-12",
        "gender": 1,
        "passengerType": 1,
        "isLeader": true,
        "nationality": "TR",
        "phone": "+905321234567",
        "email": "ahmet.yilmaz@example.com"
      }
    ],
    "payments": [
      { "id": 9101, "amount": 600.00, "currencyCode": "EUR", "method": 2, "methodName": "Cari", "paymentDate": "2026-09-01T09:20:10", "euroAmount": 600.00, "exchangeRate": 1 },
      { "id": 9102, "amount": 640.00, "currencyCode": "EUR", "method": 2, "methodName": "Cari", "paymentDate": "2026-09-02T11:05:47", "euroAmount": 640.00, "exchangeRate": 1 }
    ]
  }
}
Rezervasyon id veya bkgNumber ile sorgulanır (biri yeterlidir). Yanıttaki bookingConfirmStateId otelin teyit durumudur ve rezervasyonun kendi durumundan (bookingStateId) bağımsızdır: kesin rezervasyon hâlâ teyit bekliyor olabilir. Maliyet ve kâr alanları yalnız yönetici kullanıcıya doldurulur; acente kullanıcısında null döner.
Rezervasyon listesi
İstek
POST /api/Booking/get-list
{
  "bookingStateId": 2,
  "currencyCode": "EUR",
  "checkInFrom": "2026-09-01",
  "checkInTo": "2026-09-30",
  "pageNumber": 1,
  "pageSize": 20
}
Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "pageNumber": 1,
    "pageSize": 20,
    "pageCount": 1,
    "items": [
      {
        "id": 1284,
        "bkgNumber": "20260901412837",
        "bookingStateId": 2,
        "bookingStateName": "Kesin rezervasyon",
        "productName": "Old Stone Hotel Skopje",
        "checkIn": "2026-09-10",
        "checkOut": "2026-09-14",
        "saleDate": "2026-09-01T09:14:22",
        "totalAmount": 1240.00,
        "currencyCode": "EUR",
        "bookingConfirmStateId": 2,
        "bookingConfirmStateName": "Onaylandı",
        "confirmationCode": "HTL-99213",
        "customerNames": "Ahmet Yilmaz, Elif Yilmaz, Deniz Yilmaz, Mehmet Demir",
        "totalPax": 4,
        "adultCount": 3,
        "childCount": 1,
        "infantCount": 0
      }
    ]
  }
}
Tüm filtreler opsiyoneldir; gönderilmeyen filtre uygulanmaz. Yanıt sayfalı zarfla döner (pageNumber, pageSize, pageCount, items) ve yalnız kendi acentenizin rezervasyonlarını içerir.
Otel / bölge arama (autocomplete)
İstek
GET /api/Hotel/autocomplete?key=skopje
(gövde yok — GET)
Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": [
    { "id": 11398357, "name": "Skopje, MAKEDONYA", "typeId": 4, "typeName": "State" },
    { "id": 1000133, "name": "Old Stone Hotel Skopje", "typeId": 2, "typeName": "Hotel" }
  ]
}
Dönen typeId değerini alıp search isteğinde searchTypes[].type olarak gönderin.
Referans listeleri (Lookup)
İstek
GET /api/Lookup/countries
(gövde yok — GET)
Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": [
    { "id": 129, "name": "MAKEDONYA", "nameEN": "North Macedonia", "code": "MK" }
  ]
}
İstek
GET /api/Lookup/states?countryId=129
(gövde yok — GET)
Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": [
    { "id": 11398357, "name": "Grad Skopje" }
  ]
}
İstek
GET /api/Lookup/districts?stateId=11398357&search=sko&take=50
(gövde yok — GET)
Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": [
    { "id": 785842, "name": "Skopje" }
  ]
}
Otel kataloğu (içerik)
İstek
POST /api/Hotel/catalog
{
  "search": "old stone",
  "countryId": 129,
  "stateId": 11398357,
  "districtId": 785842,
  "star": 4,
  "isActive": true,
  "pageNumber": 1,
  "pageSize": 20
}
Yanıt
{
  "message": "...",
  "responseStatus": 0,
  "data": {
    "pageNumber": 1,
    "pageSize": 20,
    "pageCount": 1,
    "items": [
      {
        "id": 1000133,
        "giataId": null,
        "name": "Old Stone Hotel Skopje",
        "countryId": 129,
        "countryName": "MAKEDONYA",
        "countryCode": "MK",
        "stateId": 11398357,
        "stateName": "Grad Skopje",
        "districtId": 785842,
        "districtName": "Skopje",
        "address": "Str. Lazar Tanev No. 1, 1000 Skopje",
        "latitude": "42.00172",
        "longitude": "21.43678",
        "star": 4,
        "rating": 4.90,
        "buildYear": null,
        "description": "<p>...</p>",
        "phoneNumber": "+389 2 512 2800",
        "website": "https://oldstonehotel.com.mk/",
        "isActive": true,
        "thumbnailUrl": "https://.../hotel-images/1000133/0.jpg",
        "images": [ { "url": "https://...", "isThumbnail": true, "sortOrder": 0 } ],
        "facilities": [ { "name": "Havuz", "isPaid": false } ],
        "roomFacilities": [ { "name": "Klima", "isPaid": false } ],
        "distances": [ { "name": "Havalimanı", "distanceMeters": 19000 } ]
      }
    ]
  }
}

Kavram Sözlüğü

Akış boyunca taşınan, bize ait kimlikler:

PriceItemId
Aramada seçilen fiyat/pansiyon seçeneği. add-hotel isteğine verilir.
BasketId
set-customers ile oluşan sepet. add-hotel ve rezervasyon adımlarında taşınır.
CustomerId
set-customers ile eklenen her yolcunun kimliği.
BkgNumber
Rezervasyon takip numaramız; yanıtlarda döner.
BookingId
Rezervasyonun sayısal kimliği; ödeme (add-payment) ve detay sorgusunda kullanılır.
OptionId
cancellation-penalty yanıtındaki iptal seçeneğinin opak kimliği; cancel isteğine olduğu gibi konur.
AccessToken
JWT erişim token'ı; süresi dolunca refresh-token ile yenilenir.