Tesis Entegrasyon

API Dokümantasyonu

v3.0

Nisan 2026

v3.0 Yayın Notları

Uyumsuz değişiklik (Breaking Change): v3 istek gövdeleri, giren_oda ve giren_kisi alanları olmadan gönderilemez; eksik alanlar 422 ile reddedilir.

v2.0 Yayın Notları

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

TGA Tesis Entegrasyon Servisi, sürekli geliştirilen ve yeni kuralların/özelliklerin eklenebildiği dinamik bir yapıdır. Bu nedenle, API yanıtlarına (response) statik bir api_version alanı eklenmiştir.

PMS Firmalarından Beklenen Sürüm Kontrol Kurgusu

Tüm PMS firmalarının/entegratörlerin kendi sistemlerinde otomatik bir versiyon kontrol mekanizması (Alert/Uyarı Sistemi) kurmalarını tavsiye ederiz.

  1. Versiyonun Kaydedilmesi: Entegrasyon yaptığınız güncel API versiyonunu (ör. v3) sisteminizde statik olarak tutunuz.
  2. Yanıt (Response) Kontrolü: TGA'ya gönderdiğiniz her başarılı günlük veri iletiminde, dönen yanıttaki api_version değerini kendi sisteminizdeki değer ile karşılaştırınız.
  3. Uyarı (Alert) Mekanizması: TGA'dan dönen api_version (ör. v4), sizde kayıtlı sürümden (ör. v3) farklıysa IT/geliştirici ekibinize otomatik uyarı üretmeniz beklenir.
  4. Güncelleme Aksiyonu: Bu uyarıyı alan teknik ekiplerin ivedilikle Tesis Entegrasyon - API Dokümantasyonu adresini ziyaret ederek en güncel Yayın Notlarını (Release Notes) okuması, değişen kurallara veya yeni alanlara göre entegrasyon yapılarını güncellemeleri beklenmektedir.

Bu kurgu, entegrasyonunuzun ilerleyen dönemlerde sürekli hata almasını engelleyecek kritik bir güvenlik önlemidir.

Ortamlar

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

Tüm endpoint'ler yukarıdaki base URL'lere göre çağrılır (örn: https://tesis-entegrasyon.tga.gov.tr/otel-veri/).

Swagger / API Test Aracı

API'yi interaktif olarak test etmek için Swagger UI kullanabilirsiniz:

OrtamSwagger URL
Test https://test-tesis-entegrasyon.tga.gov.tr/swagger
Swagger Kullanımı:

Kimlik Doğrulama

Tüm API istekleri için API anahtarı gereklidir. API anahtarınız size özel olarak oluşturulmuş ve tarafınıza iletilmiştir.

Her istekte X-API-Key başlığı ile API anahtarınızı göndermeniz gerekmektedir:

X-API-Key: pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Önemli: API anahtarınızı güvenli bir şekilde saklayınız ve üçüncü şahıslarla paylaşmayınız. Sağlayıcı bilgisi API anahtarınız üzerinden otomatik olarak belirlenmektedir.

Otel Veri Gönderimi

POST /otel-veri/

Otel verilerini sisteme aktarır. Veriler asenkron olarak işlenmek üzere kuyruğa alınır.

İstek Başlıkları

BaşlıkDeğerAçıklama
Content-Typeapplication/jsonİstek formatı
X-API-KeyAPI anahtarınızKimlik doğrulama (zorunlu)

İstek Gövdesi

{
  "tesis_belge_no": "string",
  "vergi_no": "string",
  "data": [
    {
      "rapor_tarihi": "YYYY-MM-DD",
      "para_birimi": "TRY | USD | AUD | DKK | EUR | ... (izin verilen listeden biri)",
      "toplam_oda": integer,
      "toplam_kisi": integer,
      "giren_oda": integer,
      "giren_kisi": integer,
      "net_oda_geliri": number (float),
      "vergi_tutari": number (float),
      "demografik_veriler": [
        {
          "giren_oda": integer,
          "giren_kisi": integer,
          "iso_kodu": "ISO 3166-1 alpha-3 veya OTHER",
          "yetiskin": integer,
          "cocuk": integer,
          "oda": integer,
          "net_gelir": number (float)
        }
      ],
      "kanal_veriler": [
        {
          "satis_kanali": "Acenta | Online | Bireysel | Other",
          "giren_oda": integer,
          "giren_kisi": integer,
          "oda": integer,
          "kisi": integer,
          "net_gelir": number (float)
        }
      ]
    }
  ]
}

İstek Alanları

AlanTipZorunluAçıklama
tesis_belge_nostringHayırTesis belge numarası
vergi_nostringEvetVergi numarası (10-11 haneli, sadece rakam)
dataarrayEvetVeri dizisi

Veri Alanları

AlanTipZorunluAçıklama
rapor_tarihistringEvetYYYY-MM-DD formatında rapor tarihi
para_birimistringEvetPara birimi kodu; sadece izin verilen listedeki değerler kabul edilir (aşağıya bakınız)
toplam_odaintegerEvetToplam oda sayısı
toplam_kisiintegerEvetToplam kişi sayısı
giren_odaintegerEvetİlk defa giriş yapan misafirler(check-in) — oda sayısı (satır toplamı demografik ve kanal giren_oda ile eşit; toplam_oda > giren_oda)
giren_kisiintegerEvetİlk defa giriş yapan misafirler(check-in) — kişi sayısı (satır toplamı kırılımlarla eşit; toplam_kisi > giren_kisi, giren_kisi > giren_oda)
net_oda_gelirinumber (float)EvetNet oda geliri
vergi_tutarinumber (float)EvetVergi tutarı
demografik_verilerarrayEvetÜlkeye göre demografik veriler
kanal_verilerarrayEvetSatış kanalı verileri
Çoklu Para Birimi Desteği: Aynı rapor_tarihi için farklı para birimlerinde veri gönderilebilir. Her veri öğesi kendi para_birimi alanını taşır. Örneğin, aynı tarih için hem TRY hem USD cinsinden veriler ayrı veri öğeleri olarak gönderilebilir.

Demografik Veriler

AlanTipZorunluAçıklama
giren_odaintegerEvetÜlke kırılımı giren oda(check-in) (≥ 0; satırda oda >= giren_oda)
giren_kisiintegerEvetÜlke kırılımı giren kişi(check-in) (≥ 0; yetiskin + cocuk >= giren_kisi)
iso_kodustringEvetÜlke kodu (strict ISO 3166-1 alpha-3) veya OTHER
yetiskinintegerEvetYetişkin sayısı
cocukintegerEvetÇocuk sayısı
odaintegerEvetOda sayısı (oda >= giren_oda)
net_gelirnumber (float)EvetNet gelir

Kanal Veriler

AlanTipZorunluAçıklama
satis_kanalistringEvetSadece şu değerler kabul edilir: Acenta, Online, Bireysel, Other
giren_odaintegerEvetKanal kırılımı giren oda(check-in) (≥ 0; oda >= giren_oda)
giren_kisiintegerEvetKanal kırılımı giren kişi(check-in) (≥ 0; kisi >= giren_kisi)
odaintegerEvetOda sayısı
kisiintegerEvetKişi sayısı (kisi >= giren_kisi)
net_gelirnumber (float)EvetNet gelir

Veri Tutarlılık ve Doğrulama Kuralları

Gönderilen her veri öğesi aşağıdaki kurallara uymalıdır. Bu kurallara uymayan istekler 422 hata koduyla reddedilir ve hatalar kayıt altına alınır.

1 Para Birimi (para_birimi)

para_birimi alanı yalnızca izin verilen para birimi kodlarından biri olmalıdır. İzin verilen kodlar: TRY, USD, AUD, DKK, EUR, GBP, CHF, SEK, CAD, KWD, NOK, SAR, JPY, RON, RUB, CNY, PKR, QAR, KRW, AZN, AED, KZT. Geçersiz değerlerde yanıt mesajı "Geçersiz para birimi" ve tip: "para_birimi_gecersiz" döner.

2 Ülke Kodu (iso_kodu)

iso_kodu alanı yalnızca strict ISO 3166-1 alpha-3 ülke kodu veya OTHER olabilir. Geçersiz değerler alan doğrulama hatası ile 422 döner.

3 Satış Kanalı (satis_kanali)

satis_kanali alanı yalnızca Acenta, Online, Bireysel veya Other değerlerinden biri olmalıdır. Geçersiz değerlerde yanıt mesajı "Geçersiz satış kanalı" ve tip: "satis_kanali_gecersiz" döner.

4 Oda Sayısı Dengesi

Toplam oda sayısı, demografik ve kanal bazlı oda sayıları toplamına eşit olmalıdır.

toplam_oda = Σ demografik_veriler.oda = Σ kanal_veriler.oda
5 Kişi Sayısı Dengesi

Toplam kişi sayısı, demografik yetişkin ve çocuk toplamına ve kanal kişi toplamına eşit olmalıdır.

toplam_kisi = Σ (demografik.yetiskin + demografik.cocuk) = Σ kanal_veriler.kisi
6 Gelir Dengesi

Net oda geliri, tüm kırılımların toplamına eşit olmalıdır.

net_oda_geliri = Σ demografik_veriler.net_gelir = Σ kanal_veriler.net_gelir
7 Giren Oda Dengesi

Her veri öğesinde giren_oda, demografik ve kanal satırlarındaki giren_oda toplamlarına eşit olmalıdır. Hata tip: giren_oda_dengesi.

giren_oda = Σ demografik_veriler.giren_oda = Σ kanal_veriler.giren_oda
8 Giren Kişi Dengesi

giren_kisi aynı şekilde her iki kırılımda toplanan değerlere eşit olmalıdır. Hata tip: giren_kisi_dengesi.

giren_kisi = Σ demografik_veriler.giren_kisi = Σ kanal_veriler.giren_kisi
9 Toplam ve Giren (Oda / Kişi)

Toplam kapasite, giren değerinden kesinlikle büyük olmalıdır (eşitlik geçersizdir). tip: toplam_oda_giren_oda_iliskisi, toplam_kisi_giren_kisi_iliskisi.

toplam_oda >= giren_oda , toplam_kisi >= giren_kisi
10 Toplam Kişi ve Toplam Oda

Toplam kişi sayısı, toplam oda sayısından büyük olmalıdır. tip: toplam_oda_toplam_kisi_iliskisi.

toplam_kisi >= toplam_oda
11 Giren Kişi ve Giren Oda

Aynı veri öğesinde giren kişi, giren oda sayısından büyük olmalıdır. tip: giren_kisi_giren_oda_iliskisi.

giren_kisi >= giren_oda
12 Demografik Satır: Oda / Kişi ve Giren

Her demografik satırda oda >= giren_oda ve (yetiskin + cocuk) >= giren_kisi olmalıdır. tip: demografik_oda_giren_oda_iliskisi, demografik_kisi_giren_kisi_iliskisi.

oda >= giren_oda , (yetiskin + cocuk) >= giren_kisi
13 Kanal Satırı: Oda / Kişi ve Giren

Her kanal satırında oda >= giren_oda ve kisi >= giren_kisi olmalıdır. tip: kanal_oda_giren_oda_iliskisi, kanal_kisi_giren_kisi_iliskisi.

oda >= giren_oda , kisi >= giren_kisi

Yanıtlar

200 OK Başarılı Yanıt

{
  "api_version": "v3",
  "status": "success",
  "message": "Veriler başarıyla alındı",
  "data": {
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "errors": []
  }
}

request_id alanı, isteğinizi takip etmek için kullanılabilir. Başarılı yanıtta errors boş dizi döner.

401 Kimlik Doğrulama Hatası

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

403 Erişim Engeli

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

422 Doğrulama Hatası

Alan doğrulama hatalarında:

{
  "api_version": "v3",
  "status": "error",
  "message": "Doğrulama hatası oluştu",
  "data": {
    "request_id": null,
    "errors": [
      {
        "alan": "vergi_no",
        "mesaj": "Bu alan zorunludur",
        "tip": "missing"
      }
    ]
  }
}

Geçersiz para birimi gönderildiğinde:

{
  "api_version": "v3",
  "status": "error",
  "message": "Geçersiz para birimi",
  "data": {
    "request_id": null,
    "errors": [
      {
        "alan": "data[0]",
        "tip": "para_birimi_gecersiz",
        "mesaj": "Geçersiz para birimi: 'XYZ'. İzin verilen değerler: AED, AUD, ..."
      }
    ]
  }
}

Geçersiz satış kanalı gönderildiğinde:

{
  "api_version": "v3",
  "status": "error",
  "message": "Geçersiz satış kanalı",
  "data": {
    "request_id": null,
    "errors": [
      {
        "alan": "data[0].kanal_veriler[0].satis_kanali",
        "tip": "satis_kanali_gecersiz",
        "mesaj": "Geçersiz satış kanalı: 'Foo'. İzin verilen değerler: acenta, online, bireysel, other"
      }
    ]
  }
}

Veri tutarlılık kuralı ihlallerinde:

{
  "api_version": "v3",
  "status": "error",
  "message": "Veri tutarlılık kontrolü başarısız",
  "data": {
    "request_id": null,
    "errors": [
      {
        "alan": "data[0]",
        "tip": "oda_dengesi",
        "mesaj": "Oda sayısı dengesi hatalı: toplam_oda=100, demografik oda toplamı=90, kanal oda toplamı=90"
      }
    ]
  }
}

Örnek: Çoklu Para Birimi (v3)

Aynı rapor_tarihi için TRY ve USD cinsinden iki veri öğesi. giren_oda ve giren_kisi tüm seviyelerde zorunludur; aşağıdaki sayılar v3 tutarlılık kurallarının tamamını sağlar. Daha fazla gün veya para birimi eklerken aynı denge ve eşitsizlik kuralları geçerlidir.

cURL İsteği

curl -X POST [https://tesis-entegrasyon.tga.gov.tr/otel-veri/](https://tesis-entegrasyon.tga.gov.tr/otel-veri/) \
    -H "Content-Type: application/json" \
    -H "X-API-Key: YOUR_API_KEY" \
    -d '{
      "tesis_belge_no": "TR-07-12345",
      "vergi_no": "1234567890",
      "data": [
        {
          "rapor_tarihi": "2025-10-20",
          "para_birimi": "TRY",
          "toplam_oda": 120,
          "toplam_kisi": 200,
          "giren_oda": 35,
          "giren_kisi": 80,
          "net_oda_geliri": 50000,
          "vergi_tutari": 10000,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 80, "cocuk": 20, "oda": 60, "giren_oda": 20, "giren_kisi": 40, "net_gelir": 25000 },
            { "iso_kodu": "DEU", "yetiskin": 50, "cocuk": 10, "oda": 35, "giren_oda": 10, "giren_kisi": 25, "net_gelir": 15000 },
            { "iso_kodu": "GBR", "yetiskin": 30, "cocuk": 10, "oda": 25, "giren_oda": 5, "giren_kisi": 15, "net_gelir": 10000 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 50, "kisi": 90, "giren_oda": 15, "giren_kisi": 35, "net_gelir": 22000 },
            { "satis_kanali": "Online", "oda": 45, "kisi": 70, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 18000 },
            { "satis_kanali": "Bireysel", "oda": 25, "kisi": 40, "giren_oda": 5, "giren_kisi": 15, "net_gelir": 10000 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-20",
          "para_birimi": "USD",
          "toplam_oda": 120,
          "toplam_kisi": 200,
          "giren_oda": 35,
          "giren_kisi": 80,
          "net_oda_geliri": 1500,
          "vergi_tutari": 300,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 80, "cocuk": 20, "oda": 60, "giren_oda": 20, "giren_kisi": 40, "net_gelir": 750 },
            { "iso_kodu": "DEU", "yetiskin": 50, "cocuk": 10, "oda": 35, "giren_oda": 10, "giren_kisi": 25, "net_gelir": 450 },
            { "iso_kodu": "GBR", "yetiskin": 30, "cocuk": 10, "oda": 25, "giren_oda": 5, "giren_kisi": 15, "net_gelir": 300 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 50, "kisi": 90, "giren_oda": 15, "giren_kisi": 35, "net_gelir": 660 },
            { "satis_kanali": "Online", "oda": 45, "kisi": 70, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 540 },
            { "satis_kanali": "Bireysel", "oda": 25, "kisi": 40, "giren_oda": 5, "giren_kisi": 15, "net_gelir": 300 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-21",
          "para_birimi": "TRY",
          "toplam_oda": 130,
          "toplam_kisi": 220,
          "giren_oda": 40,
          "giren_kisi": 90,
          "net_oda_geliri": 55000,
          "vergi_tutari": 11000,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 90, "cocuk": 20, "oda": 65, "giren_oda": 20, "giren_kisi": 45, "net_gelir": 28000 },
            { "iso_kodu": "DEU", "yetiskin": 55, "cocuk": 15, "oda": 40, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 17000 },
            { "iso_kodu": "GBR", "yetiskin": 30, "cocuk": 10, "oda": 25, "giren_oda": 5, "giren_kisi": 15, "net_gelir": 10000 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 55, "kisi": 100, "giren_oda": 20, "giren_kisi": 40, "net_gelir": 24000 },
            { "satis_kanali": "Online", "oda": 50, "kisi": 80, "giren_oda": 15, "giren_kisi": 35, "net_gelir": 21000 },
            { "satis_kanali": "Bireysel", "oda": 25, "kisi": 40, "giren_oda": 5, "giren_kisi": 15, "net_gelir": 10000 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-21",
          "para_birimi": "EUR",
          "toplam_oda": 130,
          "toplam_kisi": 220,
          "giren_oda": 40,
          "giren_kisi": 90,
          "net_oda_geliri": 1400,
          "vergi_tutari": 280,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 90, "cocuk": 20, "oda": 65, "giren_oda": 20, "giren_kisi": 45, "net_gelir": 700 },
            { "iso_kodu": "DEU", "yetiskin": 55, "cocuk": 15, "oda": 40, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 420 },
            { "iso_kodu": "GBR", "yetiskin": 30, "cocuk": 10, "oda": 25, "giren_oda": 5, "giren_kisi": 15, "net_gelir": 280 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 55, "kisi": 100, "giren_oda": 20, "giren_kisi": 40, "net_gelir": 600 },
            { "satis_kanali": "Online", "oda": 50, "kisi": 80, "giren_oda": 15, "giren_kisi": 35, "net_gelir": 520 },
            { "satis_kanali": "Bireysel", "oda": 25, "kisi": 40, "giren_oda": 5, "giren_kisi": 15, "net_gelir": 280 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-22",
          "para_birimi": "TRY",
          "toplam_oda": 110,
          "toplam_kisi": 180,
          "giren_oda": 25,
          "giren_kisi": 50,
          "net_oda_geliri": 45000,
          "vergi_tutari": 9000,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 70, "cocuk": 20, "oda": 55, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 23000 },
            { "iso_kodu": "DEU", "yetiskin": 40, "cocuk": 10, "oda": 30, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 12000 },
            { "iso_kodu": "GBR", "yetiskin": 30, "cocuk": 10, "oda": 25, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 10000 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 45, "kisi": 80, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 20000 },
            { "satis_kanali": "Online", "oda": 40, "kisi": 60, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 15000 },
            { "satis_kanali": "Bireysel", "oda": 25, "kisi": 40, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 10000 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-22",
          "para_birimi": "USD",
          "toplam_oda": 110,
          "toplam_kisi": 180,
          "giren_oda": 25,
          "giren_kisi": 50,
          "net_oda_geliri": 1350,
          "vergi_tutari": 270,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 70, "cocuk": 20, "oda": 55, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 690 },
            { "iso_kodu": "DEU", "yetiskin": 40, "cocuk": 10, "oda": 30, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 360 },
            { "iso_kodu": "GBR", "yetiskin": 30, "cocuk": 10, "oda": 25, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 300 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 45, "kisi": 80, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 600 },
            { "satis_kanali": "Online", "oda": 40, "kisi": 60, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 450 },
            { "satis_kanali": "Bireysel", "oda": 25, "kisi": 40, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 300 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-23",
          "para_birimi": "TRY",
          "toplam_oda": 140,
          "toplam_kisi": 240,
          "giren_oda": 50,
          "giren_kisi": 100,
          "net_oda_geliri": 60000,
          "vergi_tutari": 12000,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 100, "cocuk": 20, "oda": 70, "giren_oda": 25, "giren_kisi": 50, "net_gelir": 30000 },
            { "iso_kodu": "DEU", "yetiskin": 60, "cocuk": 15, "oda": 40, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 18000 },
            { "iso_kodu": "GBR", "yetiskin": 35, "cocuk": 10, "oda": 30, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 12000 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 60, "kisi": 110, "giren_oda": 25, "giren_kisi": 50, "net_gelir": 26000 },
            { "satis_kanali": "Online", "oda": 50, "kisi": 85, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 22000 },
            { "satis_kanali": "Bireysel", "oda": 30, "kisi": 45, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 12000 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-24",
          "para_birimi": "TRY",
          "toplam_oda": 135,
          "toplam_kisi": 230,
          "giren_oda": 45,
          "giren_kisi": 90,
          "net_oda_geliri": 58000,
          "vergi_tutari": 11600,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 95, "cocuk": 25, "oda": 70, "giren_oda": 25, "giren_kisi": 50, "net_gelir": 30000 },
            { "iso_kodu": "DEU", "yetiskin": 50, "cocuk": 10, "oda": 35, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 16000 },
            { "iso_kodu": "GBR", "yetiskin": 40, "cocuk": 10, "oda": 30, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 12000 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 55, "kisi": 100, "giren_oda": 20, "giren_kisi": 40, "net_gelir": 25000 },
            { "satis_kanali": "Online", "oda": 50, "kisi": 85, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 21000 },
            { "satis_kanali": "Bireysel", "oda": 30, "kisi": 45, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 12000 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-24",
          "para_birimi": "USD",
          "toplam_oda": 135,
          "toplam_kisi": 230,
          "giren_oda": 45,
          "giren_kisi": 90,
          "net_oda_geliri": 1740,
          "vergi_tutari": 348,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 95, "cocuk": 25, "oda": 70, "giren_oda": 25, "giren_kisi": 50, "net_gelir": 900 },
            { "iso_kodu": "DEU", "yetiskin": 50, "cocuk": 10, "oda": 35, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 480 },
            { "iso_kodu": "GBR", "yetiskin": 40, "cocuk": 10, "oda": 30, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 360 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 55, "kisi": 100, "giren_oda": 20, "giren_kisi": 40, "net_gelir": 750 },
            { "satis_kanali": "Online", "oda": 50, "kisi": 85, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 630 },
            { "satis_kanali": "Bireysel", "oda": 30, "kisi": 45, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 360 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-25",
          "para_birimi": "TRY",
          "toplam_oda": 125,
          "toplam_kisi": 210,
          "giren_oda": 30,
          "giren_kisi": 60,
          "net_oda_geliri": 52000,
          "vergi_tutari": 10400,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 85, "cocuk": 25, "oda": 65, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 27000 },
            { "iso_kodu": "DEU", "yetiskin": 45, "cocuk": 10, "oda": 35, "giren_oda": 10, "giren_kisi": 15, "net_gelir": 15000 },
            { "iso_kodu": "GBR", "yetiskin": 35, "cocuk": 10, "oda": 25, "giren_oda": 5, "giren_kisi": 15, "net_gelir": 10000 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 50, "kisi": 95, "giren_oda": 15, "giren_kisi": 30, "net_gelir": 23000 },
            { "satis_kanali": "Online", "oda": 50, "kisi": 75, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 19000 },
            { "satis_kanali": "Bireysel", "oda": 25, "kisi": 40, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 10000 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-26",
          "para_birimi": "TRY",
          "toplam_oda": 100,
          "toplam_kisi": 160,
          "giren_oda": 20,
          "giren_kisi": 40,
          "net_oda_geliri": 40000,
          "vergi_tutari": 8000,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 60, "cocuk": 20, "oda": 50, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 20000 },
            { "iso_kodu": "DEU", "yetiskin": 35, "cocuk": 10, "oda": 30, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 12000 },
            { "iso_kodu": "GBR", "yetiskin": 25, "cocuk": 10, "oda": 20, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 8000 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 40, "kisi": 70, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 17000 },
            { "satis_kanali": "Online", "oda": 35, "kisi": 55, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 13000 },
            { "satis_kanali": "Bireysel", "oda": 25, "kisi": 35, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 10000 }
          ]
        },
        {
          "rapor_tarihi": "2025-10-26",
          "para_birimi": "EUR",
          "toplam_oda": 100,
          "toplam_kisi": 160,
          "giren_oda": 20,
          "giren_kisi": 40,
          "net_oda_geliri": 1100,
          "vergi_tutari": 220,
          "demografik_veriler": [
            { "iso_kodu": "TUR", "yetiskin": 60, "cocuk": 20, "oda": 50, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 550 },
            { "iso_kodu": "DEU", "yetiskin": 35, "cocuk": 10, "oda": 30, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 330 },
            { "iso_kodu": "GBR", "yetiskin": 25, "cocuk": 10, "oda": 20, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 220 }
          ],
          "kanal_veriler": [
            { "satis_kanali": "Acenta", "oda": 40, "kisi": 70, "giren_oda": 10, "giren_kisi": 20, "net_gelir": 470 },
            { "satis_kanali": "Online", "oda": 35, "kisi": 55, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 410 },
            { "satis_kanali": "Bireysel", "oda": 25, "kisi": 35, "giren_oda": 5, "giren_kisi": 10, "net_gelir": 220 }
          ]
        }
      ]
    }'

Beklenen Yanıt

{
  "api_version": "v3",
  "status": "success",
  "message": "Veriler başarıyla alındı",
  "data": {
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "errors": []
  }
}