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)applicationSecretKey, userName ve password ile bir erişim token'ı alınır. Bu üç alan da zorunludur ve size operasyon ekibimiz tarafından verilir.
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
}
}
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" }
]
}
Sistemdeki turların ve tüm detaylarının listesini verir. Katalog senkronizasyonu için kullanılır (opsiyonel Ids[] ile filtrelenebilir).
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://..."
} ]
}
}
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://..."
} ]
}
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.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ı" }
]
}
Tarih ve yolcu kriterleriyle turların fiyatını hesaplar. TourId, TourAreaId veya TourCountryId ile daraltılır.
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": {}
} ]
} ]
}
TourId / TourAreaId / TourCountryId alanlarından yalnızca biri gönderilmelidir. Birden fazlası dolu gelirse API sonuç döndürmez.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.Bir turun satılabilir periyotlarını (tarih/kalkış) verir. Fiyatları kendi sisteminize kaydetmek isterseniz bu ucu kullanabilirsiniz.
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
} ]
}
}
search-tour-async ucundan Detail = 1 ile sorgulama yapılması gerekmektedir.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 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
} ]
}
}
search-tour-async ucundan Detail = 1 ile sorgulama yapılması gerekmektedir.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": "..."
}
}
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ı" }
]
}
Seçilen tur periyodu + yolcu ve fatura bilgileri sepete eklenir. Tur ürününde rezervasyon yapılacak PeriyotId set edilir.
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.| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| authorization | object | Evet | Kimlik doğrulama nesnesi: userName ve token. |
| referenceNumber | string | Evet | Sizin sepet takip numaranız. Aynı numarayla ikinci kez gönderirseniz kalem mevcut sepete eklenir. |
| agencyId | int | Evet | Acente kimliği. Token sahibi acenteyle eşleşmelidir. |
| productId | int | Evet | Tur kimliği. |
| productTypeId | int | Evet | Ürün tipi. Tur için 1. |
| productPeriodId | int? | Koşullu | Kalkış (periyot) kimliği. Tur ürününde zorunludur. |
| shipCabinId | int? | Koşullu | Kabin 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. |
| price | string | Evet | Kalem fiyatı. Ondalık ayırıcı nokta olacak şekilde metin gönderilir: "1250.00". |
| currencyCode | string | Evet | Para birimi kodu. getall-currency-code-async listesinden. |
| customers | array | Evet | Yolcu listesi. Her kalem için en az bir yolcu gönderilir. |
| billingDetail | object | Evet | Fatura bilgisi. Sepet başına tek nesnedir. |
| notes | array | Hayır | Rezervasyon notları. basketNoteTypeId + note çiftleri. |
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| firstName | string | Evet | Ad. Yalnızca harf içerebilir, en fazla 50 karakter. |
| lastName | string | Evet | Soyad. Yalnızca harf içerebilir, en fazla 50 karakter. |
| birthDate | string | Evet | Doğum tarihi. Yolcu tipi (yetişkin/çocuk/bebek) bu tarihten türetilir. |
| gender | short | Evet | Cinsiyet. Gender tablosuna bakınız. |
| tckn | string | Koşullu | TC kimlik numarası. Yabancı uyruklu yolcuda boş bırakılıp pasaport numarası gönderilir. |
| passportNo | string | Koşullu | Pasaport numarası. |
| phone | string? | Koşullu | Telefon. İlk yolcuda zorunludur. |
| string? | Koşullu | E-posta. İlk yolcuda zorunludur. | |
| nationalityId | int? | Hayır | Uyruk (ülke kimliği). |
| visaStatus | int? | Hayır | Vize durumu. Vize isteyen turlarda gönderilir. |
| busServicePointId | int? | Hayır | Biniş (servis) noktası kimliği. getall-bus-service-point-by-city-id-async listesinden. |
| roomNumberId | int? | Hayır | Oda numarası. Aynı odayı paylaşan yolcular aynı değeri taşır. |
| additionalServices | array | Hayır | Yolcuya bağlı ek hizmetler: id + price çiftleri. |
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
| firstName | string? | Koşullu | Fatura adı. |
| lastName | string? | Koşullu | Fatura soyadı. |
| companyName | string? | Koşullu | Firma adı. Kurumsal faturada doldurulur. |
| phone | string | Evet | Telefon. |
| string | Evet | E-posta. Rezervasyon belgeleri bu adrese gider. | |
| countryId | int | Evet | Ülke kimliği. getall-country-async listesinden. |
| cityId | int | Evet | Şehir kimliği. getall-city-by-country-id-async listesinden. |
| taxOffice | string? | Koşullu | Vergi dairesi. Kurumsal faturada. |
| taxNumber | string? | Koşullu | Vergi numarası. Kurumsal faturada. |
| tckn | string? | Koşullu | TC kimlik numarası. Bireysel faturada. |
| passportNo | string? | Koşullu | Pasaport numarası. Yabancı uyruklu alıcıda. |
| addressDetail | string? | Hayır | Açı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
}
}
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 } ]
} ]
}
}
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": {}
}
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": {}
}
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 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
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)
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
}
}
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": {}
}
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.
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.Periods[].ShipCabinTypeId → ShipCabinTypes[].Id ve Periods[].AvailableCabinIds[] → ShipCabins[].Id.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.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).
| Alan | Tip | Açıklama |
|---|---|---|
| Id | int | Periods[].ShipCabinTypeId |
| Name | string | Kabin tipinin adı. API çağrısında Türkçe, B2B arayüzünden gelen aramada kullanıcının seçili dili. |
| Capacity | int | Kabinin alabileceği kişi sayısı. Bebek dahil sayılır. |
| AreaSqm | decimal | Metrekare. |
| HasWindow | bool | Penceresi var mı. Kabin TİPİNDE tutulur, kabinde değil. |
| HasBalcony | bool | Balkonu var mı. Kabin TİPİNDE tutulur, kabinde değil. |
| Description | string? | Serbest metin açıklama. Girilmemişse null. |
| CoverPhoto | string? | Kapak görseli (küçük boy). Kapak işaretlenmemişse ilk görsel kullanılır, galeri boşsa null. |
| Images | string[] | Galeri görselleri, kapak ilk sırada. Galeri boşsa boş liste. |
| Alan | Tip | Açıklama |
|---|---|---|
| Id | int | Periods[].AvailableCabinIds[] |
| ShipCabinTypeId | int | Bağlı olduğu kabin tipi. ShipCabinTypes[].Id ile eşleşir. |
| CabinNo | string | Kabin numarası. Sepete eklerken taşınan kimlik bu kabindir. |
| Deck | int | Güverte numarası. |
| SideId | int? | Bordo. ShipCabinSide tablosuna bakınız; girilmemişse null. |
| PositionId | int? | Boyuna konum. ShipCabinPosition tablosuna bakınız; girilmemişse null. |
| IsAccessible | bool | Engelli erişimine uygun mu. KABİNDE tutulur, tipte değil. |
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.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 } ]
}
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.
Ü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" } ]
}
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" } ]
}
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" } ]
}
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" } ]
}
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" } ]
}
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" } ]
}
İ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" } ]
}
• 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.
Content-Type: application/json başlığı olmadan gönderilen GET isteği 415 Unsupported Media Type ile döner.Zarf Yapısı
{
"responseStatus": 0,
"message": "...",
"data": { ... },
"totalDataCount": null,
"customParameters": null
}
| data | İşlem başarılı olsa bile sonuç yoksa null gelebilir. |
| totalDataCount | Sayfalı uçlarda toplam kayıt sayısı, diğerlerinde null. |
| customParameters | Uca özel ek alanlar; çoğu yanıtta null. |
responseStatus
| Kod | Sabit | Açıklama |
|---|---|---|
| 0 | Success | Başarılı |
| 1 | Info | Bilgi |
| 2 | Warning | Uyarı (iş kuralı) |
| 3 | Error | Hata |
| 1 | PreReservation | Ön rezervasyon (opsiyon) |
| 2 | SucceededReservation | Kesin rezervasyon |
| 3 | CanceledBySucceededReservation | Kesinden iptal |
| 4 | CanceledByPreReservation | Ön rezervasyondan iptal |
| 1 | Tour | Tur |
| 1 | InternationalTours | Yurt dışı turu |
| 2 | ShipCruise | Gemi turu (hazır kruvaziyer paketi) |
| 3 | DomesticTours | Yurt içi turu |
| 4 | PrivateShipCruise | Özel gemi turu — kabin bazlı satış |
| 0 | None | Belirtilmemiş |
| 1 | Port | İskele (sol) |
| 2 | Starboard | Sancak (sağ) |
| 0 | None | Belirtilmemiş |
| 1 | Forward | Baş |
| 2 | Midship | Orta |
| 3 | Aft | Kıç |
| 1 | Adult | Yetişkin |
| 2 | Child | Çocuk |
| 3 | Infant | Bebek |
| 1 | Male | Erkek |
| 2 | Female | Kadın |
| TRY | Türk Lirası | |
| USD | Amerikan Doları | |
| EUR | Euro | |
| GBP | İngiliz Sterlini |
| 1 | TR | Türkçe | tr-TR |
| 2 | EN | İngilizce | en-US |
| 3 | ES | İspanyolca | es-ES |
| 4 | PT | Portekizce | pt-BR |
get-token ile alınan, 24 saat geçerli erişim token'ı; her istekte Authorization objesinde userName ile birlikte gönderilir.
Sizin sisteminizdeki sepet takip numaranız. add-basket-item-async isteğinde bu adla gönderilir ve B2B sepetine eşlenir.
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.
Kesin rezervasyon sonrası dönen rezervasyon numarası; satış sonrası tüm takip bunun üzerinden yapılır.
Tur ürününde sepete eklenen periyodun (tarih/kalkış) kimliği.