Tesis Aylık Rapor API

Konaklama tesislerinin aylık rapor verilerini göndermek için entegrasyon dokümanı.

v6.0.0

Genel Bilgi

Bu doküman yalnızca POST /tesis-aylik-rapor/ endpoint'ini kapsar. İsteklerde tesisin aylık oda, yatak, açık gün ve ülke kırılımı bazlı metrikleri gönderilir.

Veri Güncelleme (Düzeltme) Kuralı: Daha önce gönderdiğiniz bir döneme ait verileri güncellemek istiyorsanız, aynı tesis id değeri ve aynı rapor_tarihi ile ilgili dönemin tüm verilerini (tüm milliyet kırılımları dahil) eksiksiz olarak yeniden göndermeniz gerekmektedir. Yalnızca değişen alanları içeren kısmi gönderimler desteklenmez. Bir tesisin ilgili dönemine ait veriler için en son alınan istek esas alınır; aynı döneme ait önceki gönderimler geçersiz sayılır.
Tüm başarılı ve hatalı yanıtlarda api_version alanı v6.0.0 döner. Entegrasyon tarafında bu değer izlenmeli ve beklenmeyen sürüm değişiklikleri için uyarı üretilmelidir.

v6.0.0 Yayın Notları

v6.0.0 ile Gelen Değişiklikler (ÖNEMLİ — Payload yapısı güncellendi)

  • Aylık Ortalama Fiyatın Tesis Düzeyinde Alınması: Aylık ortalama oda fiyatı artık ülke (milliyet) kırılımı bazında değil, tesis-ay düzeyinde tek değer olarak alınmaktadır. Bu kapsamda istek gövdesinin kök (root) seviyesine aylik_ortalama_fiyat alanı eklenmiştir; data dizisi öğelerinde fiyat alanı artık yer almamaktadır. Fiyat, önceki sürümlerde olduğu gibi kahvaltı, KDV ve diğer vergiler hariç net EURO (€) cinsinden iletilmelidir. Farklı para birimlerinden çevrim yapılması gerektiğinde, ilgili ayın son iş gününe ait T.C. Merkez Bankası (TCMB) döviz satış kuru baz alınmalıdır.
  • Geriye Dönük Uyumluluk: data öğeleri içinde fiyat alanı gönderilmesi durumunda istek reddedilmez; bu alan dikkate alınmaz (yok sayılır). Geçerli fiyat bilgisi yalnızca kök seviyedeki aylik_ortalama_fiyat alanından okunur. Entegrasyonunuzu en kısa sürede yeni yapıya geçirmenizi rica ederiz.
  • Versiyon Güncellemesi: API sürümü v6.0.0 olarak yayınlanmıştır. Tüm yanıtlardaki api_version alanı bu değeri döner; versiyon kontrol mekanizmanızı güncelleyiniz.

v5.0.1 Yayın Notları

v5.0.1 ile Gelen Değişiklikler

  • UUID Sürüm Kısıtlamasının Kaldırılması: id alanı için yalnızca UUID v4 kabul eden katı doğrulama gevşetildi. Artık RFC 4122 ile uyumlu tüm UUID sürümleri (v1, v3, v4, v5, v7 vb.) kabul edilmektedir. Mevcut v4 tabanlı entegrasyonlar herhangi bir değişiklik yapmadan çalışmaya devam edecektir; bu yalnızca geriye dönük uyumlu bir doğrulama iyileştirmesidir.

v5 ile Gelen Değişiklikler

  • Anonim Veri Akışı ve Tesis Kimliği (ID) Kullanımı: Yeni versiyon ile anonim bir yapıya geçiş yaptık. Artık API bağlantılarında "tesis belge numarası" veya "vergi numarası" gibi tesisi doğrudan tanımlayıcı özel veriler kullanılmayacaktır. Bunun yerine, veri akışını PMS sağlayıcılarının her tesis için kendi içlerinde üretecekleri tekil id değeri üzerinden sağlamayı hedefliyoruz. Bu alanın geçerli bir UUID v4 formatında iletilmesi yeterli olacaktır. Farklı sağlayıcıların ürettiği id değerlerinin kendi aralarında çakışması sistemimiz açısından herhangi bir sorun teşkil etmemektedir.
  • Kapasite Bilgilerinin Eklenmesi: Tesisleri tamamen anonim olarak (sadece PMS id'si ile) takip edeceğimiz için, sistemin doluluk oranlarını ve kapasite analizlerini doğru hesaplayabilmesi adına oda_sayisi ve yatak_sayisi parametrelerine ihtiyaç duyuyoruz. Veri bütünlüğü için bu alanların eksiksiz iletilmesini bekliyoruz.
  • Lokasyon Kodları: il_kodu ve ilce_kodu alanlarının, başındaki sıfırların kaybolmaması adına metin (string) formatında gönderilmesini bekliyoruz. Bu kodları İçişleri Bakanlığı (NVİ - MERNİS) veya TÜİK standartlarına uygun şekilde iletebilirsiniz. Listede bulunmayan veya tespiti yapılamayan ilçeler için 9999 (Diğer) kodunu kullanabilirsiniz. Detaylı bilgi dokümanımızın Lokasyon Kodu Notu bölümünde yer almaktadır.
  • Açık Gün Sayısı Belirtimi: tesisin_aylik_acik_oldugu_gun_sayisi alanı için; tesis ilgili ayda tamamen kapalıysa 0 değerinin iletilmesini bekliyoruz. Tesis açık durumdaysa, 1 ile o ayın toplam takvim günü arasında uygun olan değeri belirtebilirsiniz. Eğer açık gün sayısı sisteminiz üzerinden net olarak hesaplanamıyorsa, doğrudan ilgili ayın toplam gün sayısını (örneğin 28, 30, 31) gönderebilirsiniz.
  • Fiili Konaklama Verisi: data dizisi içinde gönderilen tüm metrikler (misafir, geceleme, satılan oda-gece vb.) ileriye dönük veya iptal edilmiş rezervasyon sayılarını kapsamamalıdır. Yalnızca ilgili ayda fiilen gerçekleşmiş, check-in yapılmış ve konaklaması tamamlanmış satışlar iletilmelidir.
  • Fiyatlandırma ve Kur Bilgisi: aylik_ortalama_fiyat alanının; kahvaltı, KDV ve diğer vergiler hariç tutularak net EURO (€) cinsinden hesaplanıp iletilmesini bekliyoruz. Farklı para birimlerinden EURO'ya çevrim yapmanız gerektiğinde, ilgili ayın son iş gününe ait T.C. Merkez Bankası (TCMB) döviz satış kurunun baz alınması beklenmektedir.
  • Versiyon Kontrolü: Tüm yanıtlarda api_version alanı v5.0.1 döner. Kontrol mekanizmanızı bu değere göre güncelleyiniz.

Sürüm (Versiyon) Yönetimi ve Entegrasyonu

TGA Tesis Entegrasyon Servisi sürekli geliştirilen dinamik bir yapıdır. Bu nedenle API yanıtlarına statik bir api_version alanı eklenmiştir.

Tüm Otel Yönetim Sistemleri (PMS / CMS) firmalarının ve entegratörlerin kendi sistemlerinde otomatik bir versiyon kontrol mekanizması (Alert / Uyarı Sistemi) kurmasını tavsiye ederiz. Yanıttaki api_version (ör. v6.0.0), sizde kayıtlı sürümden farklıysa IT/geliştirici ekibinize otomatik uyarı üretilmeli ve API dokümantasyonu kontrol edilerek gerekli güncellemeler yapılmalıdır.

Ortamlar

Ortam Base URL
Test https://test-tesis-entegrasyon.tga.gov.tr
Canlı https://tesis-entegrasyon.tga.gov.tr

Kimlik Doğrulama

Her istekte size verilen API anahtarı X-API-Key başlığı ile gönderilmelidir. API anahtarı payload içinde gönderilmez.

X-API-Key: YOUR_API_KEY
API anahtarınızı üçüncü kişilerle paylaşmayın ve istemci tarafında açıkta bırakmayın.

Endpoint

POST/tesis-aylik-rapor/

Başlıklar

Başlık Değer Zorunlu
Content-Type application/json Evet
X-API-Key Size verilen API anahtarı Evet

İstek Gövdesi

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "rapor_tarihi": "2025-10",
  "il_kodu": "34",
  "ilce_kodu": "1103",
  "oda_sayisi": 100,
  "yatak_sayisi": 100,
  "tesisin_aylik_acik_oldugu_gun_sayisi": 30,
  "aylik_ortalama_fiyat": 100,
  "data": [
    {
      "iso_kodu": "TUR",
      "haftaici_toplam_giris_yapan_misafir": 200,
      "haftasonu_toplam_giris_yapan_misafir": 200,
      "haftaici_toplam_geceleme": 200,
      "haftasonu_toplam_geceleme": 200,
      "haftaici_toplam_satilan_oda_gece": 200,
      "haftasonu_toplam_satilan_oda_gece": 200
    }
  ]
}

Alanlar

Alan Tip Zorunlu Açıklama
id string (UUID) Evet Tesisin sağlayıcı sistemindeki benzersiz kimliği. RFC 4122 ile uyumlu geçerli bir UUID olmalıdır (tüm sürümler kabul edilir).
rapor_tarihi string Evet Rapor ayı. Format YYYY-MM olmalıdır (ör. 2025-10).
il_kodu string Evet İl plaka kodu. Sıfırla başlayanlar korunmalıdır (ör. "01", "34").
ilce_kodu string Evet İlçe NVİ (MERNİS) / TÜİK kodu. 1-4 karakterli string. Listede bulunmayan ilçeler için "9999"
oda_sayisi integer Evet Bakanlık belgesinde belirtilen toplam oda sayısı.
yatak_sayisi integer Evet Bakanlık belgesinde belirtilen toplam yatak sayısı.
tesisin_aylik_acik_oldugu_gun_sayisi integer Evet Tesisin ay içinde fiilen açık olduğu gün sayısı. Tamamen kapalıysa 0 gönderilir (data boş olmalıdır). Gün sayısı hesaplanamıyorsa ilgili ayın takvim gün sayısı (28, 30, 31 vb.) gönderilmelidir.
aylik_ortalama_fiyat number Koşullu Tesis-ay düzeyinde aylık ortalama oda fiyatı (EUR). Kahvaltı, KDV ve diğer vergiler hariç net EURO (€) cinsinden iletilmelidir; farklı para birimlerinden çevrimde ilgili ayın son iş günü TCMB döviz satış kuru baz alınmalıdır. ≥ 0. tesisin_aylik_acik_oldugu_gun_sayisi > 0 ise zorunludur; tesis kapalıysa (0) gönderilmez.
data array Evet Ülke (iso_kodu) bazlı aylık metrik kırılımları. Tesis o ay tamamen kapalıysa boş dizi [] gönderilmelidir.

data Öğesi Alanları

Alan Tip Açıklama
iso_kodu string ISO 3166-1 alpha-3 ülke kodu. Ayrıca XKX (Kosova), CTR (KKTC) ve OTHER kabul edilir.
haftaici_toplam_giris_yapan_misafir integer Hafta içi (Pzt–Cum) tesise fiilen giriş (check-in) yapan misafir sayısı. ≥ 0.
haftasonu_toplam_giris_yapan_misafir integer Hafta sonu (Cmt–Paz) tesise fiilen giriş (check-in) yapan misafir sayısı. ≥ 0.
haftaici_toplam_geceleme integer Hafta içi fiilen gerçekleşen toplam geceleme (kişi × gece). ≥ 0.
haftasonu_toplam_geceleme integer Hafta sonu fiilen gerçekleşen toplam geceleme (kişi × gece). ≥ 0.
haftaici_toplam_satilan_oda_gece integer Hafta içi fiilen satılıp kullanılmış oda-gece sayısı. ≥ 0. (Oda geceleme)
haftasonu_toplam_satilan_oda_gece integer Hafta sonu fiilen satılıp kullanılmış oda-gece sayısı. ≥ 0. (Oda geceleme)

Doğrulama Kuralları

1. Tesis Kimliği

id RFC 4122 ile uyumlu geçerli bir UUID olmalıdır (v1, v3, v4, v5, v7 vb. tüm sürümler kabul edilir). Özel metin formatları kabul edilmez.

2. Rapor Ayı

rapor_tarihi YYYY-MM formatında olmalıdır. Ay değeri 01 ile 12 arasında olmalıdır.

3. İl ve İlçe Kodu

il_kodu ve ilce_kodu yalnızca rakamlardan oluşmalıdır. İlçe kodu, gönderilen il koduna bağlı geçerli bir resmi ilçe kodu olmalıdır. Listede bulunmayan veya tespit edilemeyen ilçeler için 9999 kodu kullanılabilir.

4. Açık Gün Sayısı ve data

  • tesisin_aylik_acik_oldugu_gun_sayisi = 0 ise tesis kapalı kabul edilir ve data boş olmalıdır.
  • Değer 1 veya daha büyükse data boş olamaz.
  • Değer, rapor_tarihi ayının takvim gün sayısını aşamaz.

5. Aylık Ortalama Fiyat

  • aylik_ortalama_fiyat, istek gövdesinin kök seviyesinde iletilir; ülke kırılımı bazında değildir.
  • tesisin_aylik_acik_oldugu_gun_sayisi > 0 ise zorunludur ve negatif olamaz.
  • Tesis kapalıysa (tesisin_aylik_acik_oldugu_gun_sayisi = 0) bu alan gönderilmez.
  • data öğelerinde eski sürümlerde kullanılan fiyat alanları gönderilirse yok sayılır; geçerli değer yalnızca kök seviyedeki aylik_ortalama_fiyat alanından okunur.

6. Sayısal Alanlar

Tüm adet, geceleme, oda-gece ve fiyat alanları negatif olamaz.

Başarılı Yanıt

200 İstek kabul edildiğinde aşağıdaki formatta yanıt döner.

{
  "api_version": "v6.0.0",
  "status": "success",
  "message": "Veriler başarıyla alındı",
  "data": {
    "request_id": "2cb35dfc-859d-46cd-8655-22320b0cb340",
    "errors": []
  }
}

request_id, gönderimin takibi için kullanılabilir.

Hata Yanıtları

401 API Anahtarı Eksik

{
  "api_version": "v6.0.0",
  "status": "error",
  "message": "API anahtarı eksik. Lütfen X-API-Key başlığını sağlayın.",
  "data": {
    "request_id": null,
    "errors": []
  }
}

403 API Anahtarı Geçersiz veya Pasif

{
  "api_version": "v6.0.0",
  "status": "error",
  "message": "API erişimi iptal edilmiş. Lütfen destekle iletişime geçin.",
  "data": {
    "request_id": null,
    "errors": []
  }
}

422 Doğrulama Hatası

{
  "api_version": "v6.0.0",
  "status": "error",
  "message": "Geçersiz il veya ilçe kodu",
  "data": {
    "request_id": null,
    "errors": [
      {
        "alan": "ilce_kodu",
        "tip": "il_ilce_uyumsuz",
        "mesaj": "ilce_kodu '8888', il_kodu '34' için geçerli bir ilçe kodu değildir (il–ilçe eşleşmesi uyuşmuyor). Tespit edilemeyen ilçeler için '9999' kodunu kullanabilirsiniz."
      }
    ]
  }
}

Olası doğrulama hata tiplerinden bazıları:

Örnek İstekler

Açık Tesis

curl -X POST "https://tesis-entegrasyon.tga.gov.tr/tesis-aylik-rapor/" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "rapor_tarihi": "2025-10",
    "il_kodu": "34",
    "ilce_kodu": "1103",
    "oda_sayisi": 100,
    "yatak_sayisi": 100,
    "tesisin_aylik_acik_oldugu_gun_sayisi": 30,
    "aylik_ortalama_fiyat": 100,
    "data": [
      {
        "iso_kodu": "TUR",
        "haftaici_toplam_giris_yapan_misafir": 200,
        "haftasonu_toplam_giris_yapan_misafir": 200,
        "haftaici_toplam_geceleme": 200,
        "haftasonu_toplam_geceleme": 200,
        "haftaici_toplam_satilan_oda_gece": 200,
        "haftasonu_toplam_satilan_oda_gece": 200
      }
    ]
  }'

Kapalı Tesis

curl -X POST "https://tesis-entegrasyon.tga.gov.tr/tesis-aylik-rapor/" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "rapor_tarihi": "2025-11",
    "il_kodu": "07",
    "ilce_kodu": "1126",
    "oda_sayisi": 80,
    "yatak_sayisi": 160,
    "tesisin_aylik_acik_oldugu_gun_sayisi": 0,
    "data": []
  }'

Açık Gün Sayısı Bilinmiyorsa

Kesin açık gün sayısı bilinmiyorsa, rapor ayının toplam gün sayısı gönderilir. Aşağıdaki örnekte 2025-02 ayı 28 gündür.

curl -X POST "https://tesis-entegrasyon.tga.gov.tr/tesis-aylik-rapor/" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "rapor_tarihi": "2025-02",
    "il_kodu": "34",
    "ilce_kodu": "1103",
    "oda_sayisi": 50,
    "yatak_sayisi": 120,
    "tesisin_aylik_acik_oldugu_gun_sayisi": 28,
    "aylik_ortalama_fiyat": 100,
    "data": [
      {
        "iso_kodu": "TUR",
        "haftaici_toplam_giris_yapan_misafir": 100,
        "haftasonu_toplam_giris_yapan_misafir": 80,
        "haftaici_toplam_geceleme": 90,
        "haftasonu_toplam_geceleme": 70,
        "haftaici_toplam_satilan_oda_gece": 50,
        "haftasonu_toplam_satilan_oda_gece": 40
      }
    ]
  }'

Kabul edilen ülke kodları (iso_kodu)

iso_kodu alanında ISO 3166-1 alpha-3 formatında (büyük harf) resmi üç harfli kodlar kullanılır. Kod listesi aşağıda verilmiştir. Buna ek olarak şu değerler de kabul edilir: XKX (Kosova), CTR (Kuzey Kıbrıs Türk Cumhuriyeti) ve tüm diğer ülkeleri tek satırda toplamak için OTHER.

Alpha-3 Ülke / bölge adı

Lokasyon Kodu Notu

il_kodu ve ilce_kodu değerleri İçişleri Bakanlığı (NVİ - MERNİS) / TÜİK standartlarına uygun resmi kodlar olarak gönderilmelidir. Kodlar string formatındadır; bu nedenle başında sıfır olan değerler varsa sıfırları korunmalıdır.

Güncel il ve ilçe kodları listesine buradan ulaşabilirsiniz: