WTATİL TUR API

API & Entegrasyon

Tur arama, dönem/fiyat sorgulama, sepet ve rezervasyon süreçlerini kendi sisteminize entegre edebilirsiniz. Aşağıda uçtan uca akış, her adımın teknik detayı ve dikkat edilmesi gereken noktalar yer alır.

Canlı dokümantasyon (Swagger)

Entegrasyon Akışı

1 Kimlik Doğrulama
›
2 Tur Arama
›
3 Dönem & Fiyat
›
4 Sepete Ekleme
›
5 Rezervasyon

Teknik Adımlar

1Kimlik Doğrulama
POST/api/Auth/get-token-async

applicationSecretKey, userName ve password ile bir erişim token'ı alınır. Bu üç alan da zorunludur ve size operasyon ekibimiz tarafından verilir.

Nasıl kullanılır: Üretilen token 24 saat geçerlidir. Sonraki her isteğin gövdesinde bir Authorization objesi bulunmalıdır: { "userName": "...", "token": "..." }. Token HTTP header'ında değil, istek gövdesinde gönderilir. Süresi dolan token için "Token is expired." yanıtı alırsınız; yeniden get-token-async çağırın.

Kimlik Doğrulama · İstek

POST /api/Auth/get-token-async
{
  "applicationSecretKey": "****",
  "userName": "api-user",
  "password": "********"
}

Kimlik Doğrulama · Yanıt

{
  "responseStatus": 0,
  "data": {
    "token": "...",
    "expireDate": "..."   // +24 saat
  }
}
2Tur Arama
GET/api/TourCatalog/get-tour-data-via-autocomplete-async

Kullanıcı yazarken tur / kategori / bölge önerileri döndürür. Arayüzde arama kutusu yapıyorsanız akış buradan başlar. Dönen id düz bir sayı değil, tür ekli bir metindir: "9541_TourName", "201_TourCategory" gibi. Alt çizgiden ayırıp sayıyı ve türü kendiniz çözmelisiniz.

İstek

GET /api/TourCatalog/get-tour-data-via-autocomplete-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "agencyId": 1,
  "key": "Kapadokya"
}

Yanıt

{
  "responseStatus": 0,
  "data": [
    { "id": "201_TourCategory", "text": "Kapadokya Turları" },
    { "id": "9541_TourName", "text": "Honest Test Kapadokya" }
  ]
}
POST/api/TourCatalog/getall-tour-async

Sistemdeki turların ve tüm detaylarının listesini verir. Katalog senkronizasyonu için kullanılır (opsiyonel Ids[] ile filtrelenebilir).

languageCode: languageCode tur programı metinlerinin (tourProgram, paidServices, freeServices, generalConditions) dilini belirler: tr-TR, en-US, es-ES, pt-BR. Gönderilmezse ya da tanımsız bir kod gelirse Türkçe döner. Seçilen dilde metin girilmemişse o alan İspanyolca ve Portekizcede önce İngilizceye, sonra Türkçeye; İngilizcede Türkçeye düşer.

İstek

POST /api/TourCatalog/getall-tour-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "ids": [ 379 ],
  "pageNumber": 1,
  "pageSize": 20,
  "languageCode": "en-US"
}

Yanıt

{
  "responseStatus": 0,
  "data": {
    "pageNumber": 1, "pageSize": 20, "pageCount": 1,
    "items": [ {
      "id": 379,
      "name": "Küba Turu Thy İle 7 Gece 9 Gün",
      "tourTypeId": 1,
      "childAge_1": 6, "infant_Age": 2,
      "currency": { "id": 2, "name": "Amerikan Doları", "code": "USD" },
      "mealType": { "id": 2, "code": "BB" },
      "transportType": { "id": 3, "code": "Flight" },
      "tourArea": { "id": 3, "name": "Amerika Kıtası" },
      "countries": [ { "id": 55, "code": "CU" } ],
      "coverPhoto": "http://..."
    } ]
  }
}
POST/api/TourCatalog/getall-cheapest-tour-async

En ekonomik turların vitrin listesini verir (en fazla 8 kayıt: öncelikli tur bölgelerinin her biri için en ucuz tur ve bir adet gemi turu). AgencyId alınmaz; acente bilgisi Authorization token'ından çözülür. Gemi turu IsShipCruise alanıyla ayırt edilir. Yasaklı tedarikçi tanımlıysa kayıt sayısı 8'den az olabilir ve sıralama garanti edilmez. Sonuçlar 2 saat önbelleklenir.

İstek

POST /api/TourCatalog/getall-cheapest-tour-async
{
  "authorization": { "userName": "api-user", "token": "..." }
}

Yanıt

{
  "responseStatus": 0,
  "data": [ {
    "tourId": 3623,
    "tourName": "Balkan Güzelleri ... Turu",
    "tourAreaId": 7, "tourAreaName": "Balkan Turları",
    "transportTypeCode": "Flight",
    "tourPeriodId": 238202,
    "startDate": "2026-10-23T00:00:00",
    "minPrice": 299, "currencyName": "Euro",
    "isShipCruise": false,
    "coverPhoto": "http://..."
  } ]
}
⚠ Dikkat: Dönen MinPrice, acente komisyonu uygulanmamış başlangıç fiyatıdır ve yalnızca vitrin/listeleme amaçlıdır. Satışa esas (rezervasyona uygun) fiyat için search-tour-async ucunu kullanmanızı öneririz.
GET/api/TourCatalog/getall-tour-category-async

Tur kategorilerinin listesi (kültür, gemi, vize vb.). Listeleme ekranlarında filtre olarak kullanılır.

İstek

GET /api/TourCatalog/getall-tour-category-async
{
  "authorization": { "userName": "api-user", "token": "..." }
}

Yanıt

{
  "responseStatus": 0,
  "data": [
    { "id": 1, "name": "Kampanyalı Yurtdışı Turları" },
    { "id": 201, "name": "Kapadokya Turları" }
  ]
}
POST/api/TourCatalog/search-tour-async

Tarih ve yolcu kriterleriyle turların fiyatını hesaplar. TourId, TourAreaId veya TourCountryId ile daraltılır.

languageCode: languageCode (tr-TR, en-US, es-ES, pt-BR) bu uçta tur programı metinlerine ek olarak gemi turlarında kabin tipi adlarını ve açıklamalarını, gemi hizmetlerini, bayrak ülkesini ve periyot adlarını da belirler. Bu adlar dile göre değiştiği için eşlemeyi ada göre değil id alanlarına göre yapın. Seçilen dilde metin yoksa İspanyolca ve Portekizce önce İngilizceye, sonra Türkçeye; İngilizce Türkçeye düşer. Gönderilmezse ya da tanımsız bir kod gelirse tüm metinler Türkçe döner.

İstek

POST /api/TourCatalog/search-tour-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "searchParameters": {
    "agencyId": 123,
    "tourId": 379,
    "startDate": "2026-10-12",
    "endDate": "2026-11-12",
    "adultCount": 2,
    "childCount": 0,
    "childBirthDates": [],
    "detail": 1,
    "languageCode": "en-US"
  }
}

Yanıt

{
  "responseStatus": 0,
  "data": [ {
    "tourId": 379,
    "tourName": "...",
    "tourTypeId": 1,
    "periods": [ {
      "id": 98619,
      "name": "3* Şehir Dışı Oteller",
      "startDate": "24.09.2026",
      "endDate": "01.10.2026",
      "tourPrice": 1630,
      "totalPrice": 1630,
      "quota": 4,
      "remainingQuota": 2,
      "askSell": false,
      "handicaps": {}
    } ]
  } ]
}
⚠ Dikkat: TourId / TourAreaId / TourCountryId alanlarından yalnızca biri gönderilmelidir. Birden fazlası dolu gelirse API sonuç döndürmez.
⚠ Kritik: Detay sorgusunda Detail = 1, liste/ana sorgularda Detail = 0 gönderilmesi zorunludur. Aksi halde yoğun istek koruması nedeniyle uygulamanızın API erişimi bloklanır.
3Dönem & Fiyat
GET/api/TourCatalog/getall-tour-period-by-tour-id-async

Bir turun satılabilir periyotlarını (tarih/kalkış) verir. Fiyatları kendi sisteminize kaydetmek isterseniz bu ucu kullanabilirsiniz.

languageCode: languageCode tur programı metinlerinin (tourProgram, paidServices, freeServices, generalConditions) dilini belirler: tr-TR, en-US, es-ES, pt-BR. Gönderilmezse ya da tanımsız bir kod gelirse Türkçe döner. Seçilen dilde metin girilmemişse o alan İspanyolca ve Portekizcede önce İngilizceye, sonra Türkçeye; İngilizcede Türkçeye düşer.

İstek

GET /api/TourCatalog/getall-tour-period-by-tour-id-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "tourId": 379,
  "pageNumber": 1,
  "pageSize": 20,
  "languageCode": "en-US"
}

Yanıt

{
  "responseStatus": 0,
  "message": "İşleminiz başarıyla gerçekleştirildi.",
  "data": {
    "pageNumber": 1, "pageSize": 20, "pageCount": 8,
    "items": [ {
      "id": 98619,
      "hotelCabinName": "3* Şehir Dışı Oteller",
      "startDate": "24.09.2026",
      "endDate": "01.10.2026",
      "askSell": true,
      "isActive": false,
      "tourProgram": null
    } ]
  }
}
⚠ Dikkat: Fiyatlar gün içinde birçok kez değişmektedir ve sorumluluk size aittir. Satın alma işlemi öncesinde search-tour-async ucundan Detail = 1 ile sorgulama yapılması gerekmektedir.
GET/api/TourCatalog/getall-tour-period-price-async

Seçilen periyodun yolcu kırılımına göre güncel fiyatını verir. Fiyatları kendi sisteminize kaydetmek isterseniz bu ucu kullanabilirsiniz.

languageCode: languageCode tur programı metinlerinin (tourProgram, paidServices, freeServices, generalConditions) dilini belirler: tr-TR, en-US, es-ES, pt-BR. Gönderilmezse ya da tanımsız bir kod gelirse Türkçe döner. Seçilen dilde metin girilmemişse o alan İspanyolca ve Portekizcede önce İngilizceye, sonra Türkçeye; İngilizcede Türkçeye düşer.

İstek

GET /api/TourCatalog/getall-tour-period-price-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "ids": [ 379 ],
  "pageNumber": 1,
  "pageSize": 20,
  "languageCode": "en-US"
}

Yanıt

{
  "responseStatus": 0,
  "data": {
    "pageCount": 8,
    "items": [ {
      "tourId": 379,
      "tourPeriodId": 98619,
      "hotelCabinName": "3* Şehir Dışı Oteller",
      "startDate": "24.09.2026",
      "single": 1870,
      "double": 1630,
      "triple": 1730,
      "quad": null,
      "child_1": 1630,
      "infant": null
    } ]
  }
}
⚠ Dikkat: Fiyatlar gün içinde birçok kez değişmektedir ve sorumluluk size aittir. Satın alma işlemi öncesinde search-tour-async ucundan Detail = 1 ile sorgulama yapılması gerekmektedir.
GET/api/TourCatalog/get-tour-transport-detail-by-tour-id-async

Turun gidiş/dönüş ulaşım detaylarını ve kalkış noktalarını verir.

İstek

GET /api/TourCatalog/get-tour-transport-detail-by-tour-id-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "tourId": 379,
  "tourPeriodId": 98619
}

Yanıt

{
  "responseStatus": 0,
  "data": {
    "departureTransportDetail": "...",
    "arrivalTransportDetail": "..."
  }
}
GET/api/TourCatalog/getall-bus-service-point-by-city-id-async

Otobüslü turlarda şehre ait biniş (servis) noktaları. Yolcu bu noktalardan birini seçer; sepete eklerken müşteri bilgisiyle birlikte gönderilir.

İstek

GET /api/TourCatalog/getall-bus-service-point-by-city-id-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "agencyId": 1,
  "cityId": 34
}

Yanıt

{
  "responseStatus": 0,
  "data": [
    { "id": 512, "name": "Esenler Otogarı" }
  ]
}
4Sepete Ekleme
POST/api/Basket/add-basket-item-async

Seçilen tur periyodu + yolcu ve fatura bilgileri sepete eklenir. Tur ürününde rezervasyon yapılacak PeriyotId set edilir.

ReferenceNumber: İsteğin referenceNumber alanına kendi sisteminizdeki sepet takip numaranızı yazınız. Bu numaraya ait sepet yoksa yeni bir sepet oluşturulur ve yanıtta o sepetin basketId değeri döner. Bu kimliği saklayınız — satın alıma kadar tüm sepet işlemlerinde (ekleme/silme/rezervasyon) kullanılır.

add-basket-item-async — İstek Alanları

AlanTipZorunluAçıklama
authorizationobjectEvetKimlik doğrulama nesnesi: userName ve token.
referenceNumberstringEvetSizin sepet takip numaranız. Aynı numarayla ikinci kez gönderirseniz kalem mevcut sepete eklenir.
agencyIdintEvetAcente kimliği. Token sahibi acenteyle eşleşmelidir.
productIdintEvetTur kimliği.
productTypeIdintEvetÜrün tipi. Tur için 1.
productPeriodIdint?KoşulluKalkış (periyot) kimliği. Tur ürününde zorunludur.
shipCabinIdint?KoşulluKabin kimliği. Tur tipi 4 (özel gemi turu) olan ürünlerde zorunludur; diğer tur tiplerinde bu alan hiç gönderilmez. Tur tipi ürün tipinden ayrıdır, TourType tablosuna bakınız.
pricestringEvetKalem fiyatı. Ondalık ayırıcı nokta olacak şekilde metin gönderilir: "1250.00".
currencyCodestringEvetPara birimi kodu. getall-currency-code-async listesinden.
customersarrayEvetYolcu listesi. Her kalem için en az bir yolcu gönderilir.
billingDetailobjectEvetFatura bilgisi. Sepet başına tek nesnedir.
notesarrayHayırRezervasyon notları. basketNoteTypeId + note çiftleri.

customers[] — Yolcu Bilgisi

AlanTipZorunluAçıklama
firstNamestringEvetAd. Yalnızca harf içerebilir, en fazla 50 karakter.
lastNamestringEvetSoyad. Yalnızca harf içerebilir, en fazla 50 karakter.
birthDatestringEvetDoğum tarihi. Yolcu tipi (yetişkin/çocuk/bebek) bu tarihten türetilir.
gendershortEvetCinsiyet. Gender tablosuna bakınız.
tcknstringKoşulluTC kimlik numarası. Yabancı uyruklu yolcuda boş bırakılıp pasaport numarası gönderilir.
passportNostringKoşulluPasaport numarası.
phonestring?KoşulluTelefon. İlk yolcuda zorunludur.
emailstring?KoşulluE-posta. İlk yolcuda zorunludur.
nationalityIdint?HayırUyruk (ülke kimliği).
visaStatusint?HayırVize durumu. Vize isteyen turlarda gönderilir.
busServicePointIdint?HayırBiniş (servis) noktası kimliği. getall-bus-service-point-by-city-id-async listesinden.
roomNumberIdint?HayırOda numarası. Aynı odayı paylaşan yolcular aynı değeri taşır.
additionalServicesarrayHayırYolcuya bağlı ek hizmetler: id + price çiftleri.

billingDetail — Fatura Bilgisi

AlanTipZorunluAçıklama
firstNamestring?KoşulluFatura adı.
lastNamestring?KoşulluFatura soyadı.
companyNamestring?KoşulluFirma adı. Kurumsal faturada doldurulur.
phonestringEvetTelefon.
emailstringEvetE-posta. Rezervasyon belgeleri bu adrese gider.
countryIdintEvetÜlke kimliği. getall-country-async listesinden.
cityIdintEvetŞehir kimliği. getall-city-by-country-id-async listesinden.
taxOfficestring?KoşulluVergi dairesi. Kurumsal faturada.
taxNumberstring?KoşulluVergi numarası. Kurumsal faturada.
tcknstring?KoşulluTC kimlik numarası. Bireysel faturada.
passportNostring?KoşulluPasaport numarası. Yabancı uyruklu alıcıda.
addressDetailstring?HayırAçık adres.

Sepete Ekleme · İstek

POST /api/Basket/add-basket-item-async
{
  // token istek gövdesindeki Authorization objesinde gönderilir
  "authorization": { "userName": "api-user", "token": "..." },
  "agencyId": 123,
  "referenceNumber": "KENDI-SEPET-NO-001",
  "productId": 3798,
  "productTypeId": 1,
  "productPeriodId": 55210,
  "price": "1250.00",
  "currencyCode": "EUR",
  "customers": [ { "gender": 1, "personTypeId": 1 } ]
}

Sepete Ekleme · Yanıt

{
  "responseStatus": 0,
  "message": "İşlem tamamlandı.",
  "data": {
    "basketId": 45821,
    "basketItemId": 98314
  }
}
GET/api/Basket/get-basket-by-id-async

Sepet ID'si ile sepetteki ürün ve müşteri bilgilerini verir.

İstek

GET /api/Basket/get-basket-by-id-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "agencyId": 123,
  "basketId": 45821
}

Yanıt

{
  "responseStatus": 0,
  "data": {
    "id": 45821,
    "items": [ {
      "id": 98314,
      "productId": 379,
      "productName": "...",
      "productPeriodId": 98619,
      "price": 1630,
      "currencyCode": "EUR",
      "bookingStateId": 1,
      "customers": [ { "id": 771, "firstName": "Ahmet", "personTypeId": 1 } ]
    } ]
  }
}
DELETE/api/Basket/delete-basket-item-by-id-async

Tek bir kalemi sepetten çıkarır. Alanlar: AgencyId, BasketId, BasketItemId. Kalem silinince ona bağlı müşteriler de silinir. Sepetin diğer kalemleri durur.

İstek

DELETE /api/Basket/delete-basket-item-by-id-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "agencyId": 123,
  "basketId": 45821,
  "basketItemId": 98314
}

Yanıt

{
  "responseStatus": 0,
  "message": "İşlem tamamlandı.",
  "data": {}
}
DELETE/api/Basket/delete-basket-by-id-async

Sepetin tamamını siler. Alanlar: AgencyId, Id (sepet kimliği). Yolcu vazgeçtiğinde ya da yeni bir sepete geçmek istediğinizde kullanabilirsiniz.

İstek

DELETE /api/Basket/delete-basket-by-id-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "agencyId": 123,
  "id": 45821
}

Yanıt

{
  "responseStatus": 0,
  "message": "İşlem tamamlandı.",
  "data": {}
}
Dikkat: Her iki silme de kalıcıdır, geri alınamaz. Rezervasyona dönüşmüş bir sepette silme yapılmaz — satış sonrası değişiklikler B2B üzerinden talep olarak yürür.
5Rezervasyon
POST/api/Booking/create-succeeded-booking-async

Sepet kesin rezervasyona dönüştürülür ve satın alma işlemi gerçekleşir. İstek, add-basket-item yanıtındaki sepet ID'si ile gönderilir.

bkgNumber: Yanıtta bkgNumber döner: rezervasyon numarası. Satış sonrası tüm süreç (not ekleme, durum takibi) bu numara üzerinden yürür, bu nedenle saklamanızı öneririz.

Rezervasyon · İstek

POST /api/Booking/create-succeeded-booking-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "agencyId": 123,
  "basketId": 45821,
  "trackingNumber": "KENDI-SEPET-NO-001",
  "paymentTypeId": 1,
  "paymentTransactionLogId": 0,
  "virtualPosId": null
}

Rezervasyon · Yanıt

{
  "responseStatus": 0,
  "message": "İşlem tamamlandı.",
  "data": {
    "bkgNumber": "WT-2026-0004821"
  }
}

Rezervasyon Listesi

GET/api/Booking/getall-booking-async

Kendi rezervasyonlarınızı sayfalı olarak listeler. Satış sonrası durum takibi (rezervasyon durumu, iptal, konfirme) için kullanılır. Eşleşen kayıt yoksa data alanı null döner.

Rezervasyon Listesi · İstek

GET /api/Booking/getall-booking-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "tourId": 379,
  "bkgNumber": null,
  "bookingStateId": null,
  "saleStartDate": "01.09.2026",
  "saleEndDate": "30.09.2026",
  "pageNumber": 1,
  "pageSize": 20
}

Rezervasyon Listesi · Yanıt

{
  "responseStatus": 0,
  "totalDataCount": 1,
  "data": {
    "pageNumber": 1, "pageSize": 20, "pageCount": 1,
    "items": [ {
      "id": 48210,
      "bkgNumber": "WT-2026-0004821",
      "trackingNumber": "KENDI-SEPET-NO-001",
      "bookingStateId": 2,
      "bookingStateName": "Kesin Rezervasyon",
      "customerFullName": "Ahmet Yılmaz",
      "tourId": 379,
      "tourName": "...",
      "startDate": "12.10.2026",
      "endDate": "18.10.2026",
      "adultCount": 2, "childCount": 0,
      "currencyCode": "EUR",
      "totalPrice": 2500.00,
      "paidPrice": 2500.00,
      "remainingPrice": 0.00
    } ]
  }
}

Rezervasyon Notları (Opsiyonel)

POST/api/Booking/add-booking-note-async

Rezervasyona serbest metin not ekler. Yanıtta eklenen notun id değeri döner; notu sonradan güncellemek için bu değer gerekir.

Not Ekleme · İstek

POST /api/Booking/add-booking-note-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "agencyId": 123,
  "bookingId": 48210,
  "note": "Yolcu erken check-in talep etti."
}

Not Ekleme · Yanıt

{
  "responseStatus": 0,
  "message": "İşlem tamamlandı.",
  "data": {
    "id": 7712
  }
}
PUT/api/Booking/update-booking-note-by-id-async

Mevcut bir notu günceller. id alanı notun kendi kimliğidir.

Not Güncelleme · İstek

PUT /api/Booking/update-booking-note-by-id-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "id": 7712,
  "agencyId": 123,
  "bookingId": 48210,
  "note": "Yolcu erken check-in talebinden vazgeçti."
}

Not Güncelleme · Yanıt

{
  "responseStatus": 0,
  "message": "İşlem tamamlandı.",
  "data": {}
}

Özel Gemi Turları

Tur tipi 4 olan turlar bir gemiye bağlıdır ve kabin bazlı satılır: müşteri kabin tipini değil, o kalkıştaki belirli bir kabin numarasını alır. Bu turlarda arama yanıtı üç ek koleksiyon taşır.

⚠ Kritik: Gemi koleksiyonlarının tamamı yalnızca Detail > 0 gönderilen aramada dolar. Detail = 0 yanıtında Ship, ShipCabinTypes, ShipCabins ve periyottaki AvailableCabinIds alanlarının hepsi null gelir — liste ekranı için tasarım budur; kabin seçtirecek ekranda Detail = 1 göndermeniz gerekir.
Bağlantı şeması: Kabin tipi ve kabin bilgileri her kalkışta tekrarlanmaz; yanıtın kökünde tek sefer durur. Kalkış satırı bunlara kimlikle bağlanır: Periods[].ShipCabinTypeId → ShipCabinTypes[].Id ve Periods[].AvailableCabinIds[] → ShipCabins[].Id.
⚠ Dikkat: AvailableCabinIds o kalkışta boş olan bütün kabinleri taşır, kotaya göre kırpılmaz. Kota bir üst sınırdır ve Quota alanında gelir; sınır sepetteki toplam kabin adedi üzerinden uygulanır. Kota bittiyse fiziksel boş kabin kalsa bile AvailableCabinIds null döner.
Dikkat: Periyot satırındaki Name, kabin tipi adının kalkış anındaki kopyasıdır. Kabin tipi sonradan yeniden adlandırıldıysa geçmiş kalkışlarda eski adı taşıyabilir; güncel ad için ShipCabinTypes[].Name esas alınmalıdır.

Ship — Geminin Künyesi

Yanıtın kökünde tek sefer gelir. Id ve Name dışındaki alanların tamamı opsiyoneldir: operatör gemi tanımlarken yalnızca elindeki bilgiyi girer, boş alan null döner. Alan grupları: kimlik (FlagCountry, ImoNumber, HomePort, BuildYear, LastRenovationYear), kapasite ve teknik (PassengerCapacity, CrewCount, LengthMeter, WidthMeter, GrossTonnage, CruisingSpeedKnot), tesis sayıları (RestaurantCount, BarCount, PoolCount, MeetingRoomCount, ShopCount, ElevatorCount, JacuzziCount, ShowRoomCount, PlaygroundCount), galeri (CoverPhoto, Images) ve olanaklar (FreeServices, PaidServices).

ShipCabinType — Kabin Tipi

AlanTipAçıklama
IdintPeriods[].ShipCabinTypeId
NamestringKabin tipinin adı. API çağrısında Türkçe, B2B arayüzünden gelen aramada kullanıcının seçili dili.
CapacityintKabinin alabileceği kişi sayısı. Bebek dahil sayılır.
AreaSqmdecimalMetrekare.
HasWindowboolPenceresi var mı. Kabin TİPİNDE tutulur, kabinde değil.
HasBalconyboolBalkonu var mı. Kabin TİPİNDE tutulur, kabinde değil.
Descriptionstring?Serbest metin açıklama. Girilmemişse null.
CoverPhotostring?Kapak görseli (küçük boy). Kapak işaretlenmemişse ilk görsel kullanılır, galeri boşsa null.
Imagesstring[]Galeri görselleri, kapak ilk sırada. Galeri boşsa boş liste.

ShipCabin — Fiziksel Kabin

AlanTipAçıklama
IdintPeriods[].AvailableCabinIds[]
ShipCabinTypeIdintBağlı olduğu kabin tipi. ShipCabinTypes[].Id ile eşleşir.
CabinNostringKabin numarası. Sepete eklerken taşınan kimlik bu kabindir.
DeckintGüverte numarası.
SideIdint?Bordo. ShipCabinSide tablosuna bakınız; girilmemişse null.
PositionIdint?Boyuna konum. ShipCabinPosition tablosuna bakınız; girilmemişse null.
IsAccessibleboolEngelli erişimine uygun mu. KABİNDE tutulur, tipte değil.
Sepete eklerken: Özel gemi turunda ShipCabinId zorunludur; göndermezseniz istek reddedilir. Gönderdiğiniz kimlik, o kalkışın AvailableCabinIds listesinde bulunmalıdır. Bir istek bir kabin satar: iki kabin için sepete iki kalem eklenir.
⚠ Dikkat: Arama ile sepete ekleme arasında kabin başkasına satılmış olabilir. Bu durumda uç ShipCabinNoLongerAvailable mesajıyla döner; listeyi tazeleyip kullanıcıya yeniden seçtirmeniz gerekir.

Özel Gemi Turu · Arama Yanıtı (Kısaltılmış)

{
  "ship": { "id": 1003, "name": "M/S Ege Prensesi", "passengerCapacity": 32 },
  "shipCabinTypes": [
    { "id": 1012, "name": "İç Kabin", "capacity": 2, "areaSqm": 12.5,
      "hasWindow": false, "hasBalcony": false }
  ],
  "shipCabins": [
    { "id": 5501, "shipCabinTypeId": 1012, "cabinNo": "IC-01",
      "deck": 3, "sideId": 1, "isAccessible": false }
  ],
  "periods": [
    { "id": 197695, "shipCabinTypeId": 1012,
      "availableCabinIds": [ 5501, 5502 ], "quota": 4,
      "remainingQuota": 2 }
  ]
}

Özel Gemi Turu · Sepete Ekleme (Özet)

POST /api/Basket/add-basket-item-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "agencyId": 123,
  "referenceNumber": "KENDI-SEPET-NO-001",
  "productId": 8911,
  "productTypeId": 1,
  "productPeriodId": 197695,
  "shipCabinId": 5501,
  "price": "1250.00",
  "currencyCode": "EUR",
  "customers": [ { "gender": 1, "personTypeId": 1 } ]
}

Yardımcı Uçlar (Referans Listeleri)

Form alanlarını doldururken kullanacağınız sabit listeler. Bu değerleri kendi tarafınızda sabit yazmak yerine bu uçlardan çekmeniz önerilir — liste güncellendiğinde entegrasyonunuz bozulmaz.

GET/api/Common/getall-country-async

Ülke listesi. Müşteri uyruğu ve fatura adresi alanlarında kullanılır.

İstek

GET /api/Common/getall-country-async
{
  "authorization": { "userName": "api-user", "token": "..." }
}

Yanıt

{
  "responseStatus": 0,
  "data": [ { "id": 1, "name": "AFGANİSTAN" } ]
}
GET/api/Common/getall-city-by-country-id-async

Seçilen ülkeye ait şehirler. Biniş noktası sorgusunda da bu şehir kimliği kullanılır.

İstek

GET /api/Common/getall-city-by-country-id-async
{
  "authorization": { "userName": "api-user", "token": "..." },
  "countryId": 1
}

Yanıt

{
  "responseStatus": 0,
  "data": [ { "id": 42, "name": "Badakhshan" } ]
}
GET/api/Common/getall-gender-async

Cinsiyet listesi. Yolcu bilgisi girilirken kullanılır.

İstek

GET /api/Common/getall-gender-async
{
  "authorization": { "userName": "api-user", "token": "..." }
}

Yanıt

{
  "responseStatus": 0,
  "data": [ { "id": 1, "name": "Erkek" } ]
}
GET/api/Common/getall-currency-code-async

Para birimi listesi; id ve Türkçe name döner (ISO kodu bu uçtan gelmez). Sepete eklerken gönderilen currencyCode ise "EUR" gibi ISO kodudur, aşağıdaki Currency referans tablosuna bakınız.

İstek

GET /api/Common/getall-currency-code-async
{
  "authorization": { "userName": "api-user", "token": "..." }
}

Yanıt

{
  "responseStatus": 0,
  "data": [ { "id": 3, "name": "Euro" } ]
}
GET/api/Common/getall-meal-type-async

Pansiyon tipi listesi. Konaklama içeren turlarda gösterilir.

İstek

GET /api/Common/getall-meal-type-async
{
  "authorization": { "userName": "api-user", "token": "..." }
}

Yanıt

{
  "responseStatus": 0,
  "data": [ { "id": 1, "name": "Room Only" } ]
}
GET/api/Booking/getall-booking-state-async

Rezervasyon durumu listesi. Aşağıdaki BookingState tablosunun canlı karşılığıdır.

İstek

GET /api/Booking/getall-booking-state-async
{
  "authorization": { "userName": "api-user", "token": "..." }
}

Yanıt

{
  "responseStatus": 0,
  "data": [ { "id": 2, "name": "Kesin Rezervasyon" } ]
}
GET/api/Booking/getall-booking-cancel-type-async

İptal tipi listesi. Rezervasyon iptal edilirken hangi tipin gönderileceğini belirler.

İstek

GET /api/Booking/getall-booking-cancel-type-async
{
  "authorization": { "userName": "api-user", "token": "..." }
}

Yanıt

{
  "responseStatus": 0,
  "data": [ { "id": 4, "name": "Müşteri Talebi" } ]
}

Önemli Notlar

• Tüm istek ve yanıtlar JSON'dur ve standart bir zarf yapısı kullanır: { responseStatus, message, data }.

• İş sonucunu HTTP durum kodundan değil, yanıttaki responseStatus alanından kontrol ediniz.

• Kimlik doğrulama token tabanlıdır; token 24 saat geçerlidir, süresi dolunca yeniden get-token-async çağrılır.

• Fiyat ve müsaitlik anlıktır; ana sorgularda Detail = 0 kuralına uyulması gerekir.

• Rezervasyon oluşturulurken sepetin tamamı ürün tipine göre kontenjan açısından doğrulanır: aynı kalkıştan sepetteki kalem sayısı kalan kontenjanı aşarsa create-succeeded-booking-async hata döner ve hiçbir kalem satılmaz. Yanıttaki mesaj hangi üründe kaç fazla olduğunu belirtir.

• Özel gemi turunda kabin sepete eklendiğinde rezerve edilmez; kabini ilk satın alan kazanır. Sepete ekleme ile rezervasyon arasında kabin başkasına satılmış olabilir, bu durumda rezervasyon adımı kabin numarasını belirten bir hata döner.

• AgencyId gönderilse bile token'ın sahibi olan acenteye göre belirlenir; genel merkez kullanıcıları dışında başka bir acente adına işlem yapılamaz. Acentesi pasif olan API kullanıcısı hiçbir uçta işlem yapamaz.

GET uçları: Bu dokümandaki GET uçları parametreleri sorgu dizesinden değil, istek gövdesindeki JSON nesnesinden okur. Gövdesiz ya da Content-Type: application/json başlığı olmadan gönderilen GET isteği 415 Unsupported Media Type ile döner.

Yanıt Zarfı ve Durum Kodları

Zarf Yapısı

{
  "responseStatus": 0,
  "message": "...",
  "data": { ... },
  "totalDataCount": null,
  "customParameters": null
}
dataİşlem başarılı olsa bile sonuç yoksa null gelebilir.
totalDataCountSayfalı uçlarda toplam kayıt sayısı, diğerlerinde null.
customParametersUca özel ek alanlar; çoğu yanıtta null.

responseStatus

KodSabitAçıklama
0SuccessBaşarılı
1InfoBilgi
2WarningUyarı (iş kuralı)
3ErrorHata

Referans Kodları

Rezervasyon Durumu (BookingState)

1PreReservationÖn rezervasyon (opsiyon)
2SucceededReservationKesin rezervasyon
3CanceledBySucceededReservationKesinden iptal
4CanceledByPreReservationÖn rezervasyondan iptal

Ürün Tipi (ProductType)

1TourTur

Tur Tipi (TourType)

1InternationalToursYurt dışı turu
2ShipCruiseGemi turu (hazır kruvaziyer paketi)
3DomesticToursYurt içi turu
4PrivateShipCruiseÖzel gemi turu — kabin bazlı satış

Kabin Bordosu (ShipCabinSide)

0NoneBelirtilmemiş
1Portİskele (sol)
2StarboardSancak (sağ)

Kabin Konumu (ShipCabinPosition)

0NoneBelirtilmemiş
1ForwardBaş
2MidshipOrta
3AftKıç

Yolcu Tipi (PersonType)

1AdultYetişkin
2ChildÇocuk
3InfantBebek

Cinsiyet (Gender)

1MaleErkek
2FemaleKadın

Para Birimi (Currency)

TRYTürk Lirası
USDAmerikan Doları
EUREuro
GBPİngiliz Sterlini

Dil (Language)

1TRTürkçetr-TR
2ENİngilizceen-US
3ESİspanyolcaes-ES
4PTPortekizcept-BR

Kavram Sözlüğü

Token

get-token ile alınan, 24 saat geçerli erişim token'ı; her istekte Authorization objesinde userName ile birlikte gönderilir.

ReferenceNumber

Sizin sisteminizdeki sepet takip numaranız. add-basket-item-async isteğinde bu adla gönderilir ve B2B sepetine eşlenir.

BasketId

add-basket-item-async yanıtında dönen sepet kimliği; satın alıma kadar tüm sepet işlemlerinde kullanılır.

BkgNumber

Kesin rezervasyon sonrası dönen rezervasyon numarası; satış sonrası tüm takip bunun üzerinden yapılır.

ProductPeriodId

Tur ürününde sepete eklenen periyodun (tarih/kalkış) kimliği.

API taban adresi, uygulama anahtarı ve ayrıntılı teknik dokümantasyon için operasyon ekibimizle iletişime geçebilirsiniz.  ·  © 2026 WTatil