TR fonları

Türk yatırım ve emeklilik fonları (3.700+): NAV fiyatları ve geçmişi, fon künyeleri, getiri sıralamaları, günlük yatırımcı akışları ve ayırt edici veri seti — aylık açıklanan portföyler, pozisyon akışları, elinde-tutanlar ve akış trendleri.

Uç noktalar

Uç noktaKapsamAçıklama
GET/v1/quotes/fund:{CODE}quotes:fundBirim başına NAV + günlük değişim
GET/v1/funds/{CODE}/profilequotes:fundKünye: kurucu, tür, ISIN, risk, ücretler, işlem durumu, stopaj, valör, doluluk
GET/v1/funds/ranking?period=&type=&limit=&order=quotes:fundTüm fonlar bir dönemdeki getiriye göre sıralı (1h…5y)
GET/v1/funds/{CODE}/nav-history?from=&to=&currency=historyGünlük NAV serisi (?currency= NAV'ı çevirir)
GET/v1/funds/{CODE}/performancehistoryGetiriler (1h…5y), yıllık volatilite, maksimum düşüş, Sharpe & Sortino
GET/v1/funds/{CODE}/investor-flows?from=&to=&window=historyGünlük yatırımcı para giriş/çıkışı (alımlar − geri satımlar), isteğe bağlı pencere özeti
GET/v1/funds/{CODE}/holdings?period=funds:analyticsBir aya ait açıklanan portföy (varsayılan: en son)
GET/v1/funds/{CODE}/holdings-historyfunds:analyticsYakın açıklama dönemleri boyunca varlıklar
GET/v1/funds/{CODE}/flows?period=funds:analyticsÖnceki döneme göre pozisyon değişimleri, |değer farkı|na göre sıralı
GET/v1/funds/holders-of/{id}funds:analyticsEn son açıklamasında bir enstrümanı tutan her fon; ağırlık / değer / adet ile
GET/v1/funds/trending?dimension=funds:analyticsstock | sector | portfoy_sector — bu dönemin en büyük toplam akışları

Fon yolları kanonik kimliği (fund:TLY) ya da çıplak TEFAS kodunu (TLY) kabul eder. Sağlayıcı raporlamadığında alanlar null'dır — hiçbir değer varsayılanla doldurulmaz.

Deneme Alanı'nda deneyin →

Fon profili (künye)

Tek çağrı fonun kimlik kartını döndürür. Ad, kurucu, kategori, ISIN, risk değeri, ücret, yatırımcı sayısı ve fon büyüklüğüne ek olarak profil şunları taşır:

AlanTürNotlar
product_typestring | nullmutual_fund | pension_fund | etf | venture_capital_fund (girişim sermayesi, GSYF) | real_estate_fund (gayrimenkul, GYF). etf şimdilik boş: fon evreninde BYF yok, BYF'ler BIST'te enstrüman olarak işlem görür. Sağlayıcı kategori vermediğinde null.
tefas_statusstring | nullTEFAS işlem durumu: open | closed | suspended.
befas_statusstring | nullBEFAS işlem durumu (emeklilik fonları): open | closed | suspended; BEFAS'ta olmayan fonlarda null.
status_textstring | nullSağlayıcının durum metni olduğu gibi, ör. “TEFAS'ta İşlem Görüyor”.
withholding_type / withholding_rule_codestring | nullYayımlandığı haliyle stopaj kuralı adı ve kural kodu.
withholding_ratedecimal string | nullGerçek kişi yatırımcılar için stopaj oranı, yayımlandığı haliyle.
withholding_rate_corporatedecimal string | nullTüzel kişi yatırımcılar için stopaj oranı, yayımlandığı haliyle.
inception_datedate | nullHalka arz tarihi; yoksa kuruluş tarihi.
buy_valor / sell_valorint | nullAlış / satış valörü, işlem günü cinsinden.
cancel_deadlinestring | nullEmir iptali son saati (İstanbul, SS:DD).
is_participationbool | nullKatılım (faizsiz) fonu bayrağı.
benchmarkstring | nullKarşılaştırma ölçütü, olduğu gibi.
kap_urlstring | nullFonun KAP bilgi sayfası.
management_fee_sourcereported | bylaw | nullreported = fonun raporlanan yönetim ücreti; bylaw = raporlanan değer 0/boştu, bu yüzden management_fee fon içtüzüğündeki yıllık ücrettir. Ücret bilinmiyorsa null.
shares_outstandingdecimal string | nullDolaşımdaki pay sayısı, en son günlük satırdan.
share_ceiling / total_share_countdecimal string | nullKayıtlı ihraç tavanı (toplam pay sayısı), en son günlük satırdan. total_share_count aynı değeri taşır.
occupancy_pctdecimal string | nullDoluluk: shares_outstanding / share_ceiling × 100, 4 ondalık. Oranın bilgi vermek yerine yanıltacağı durumlarda null: taraflardan biri eksik ya da sıfırsa; tavan dolaşımdaki pay sayısına eşitse (sermaye çağrılı fonlar tavanı ihraç edilen tutara eşitler, böylece oran hep %100 görünür ve bir şey ifade etmez); ve fon yayımlanmış tavanın üzerindeyse. Bkz. occupancy_flag.
occupancy_flagstring | nullFon tavanının %90'ına veya üzerine ulaştıysa near_limit — yöneticilerin tavanı genelde yükselttiği bant. Tavanı aştıysa over_ceiling; bu durumda occupancy_pct verilmez ve nedenini occupancy_note açıklar. Oran bir uyarı gerektirmiyorsa null.
occupancy_notestring | nullYalnızca over_ceiling ile birlikte gelir. Ya fon üst üste günlerdir tavanın üzerindedir — yani TEFAS yükseltilen tavanı henüz yayımlamamıştır — ya da fonu ilk kez tavanın üzerinde görüyoruzdur; bu durumda tek günlük bir yayım hatası olma ihtimali elenemeyeceği için bir neden iddia etmiyoruz.
occupancy_as_ofdate | nullDoluluk alanlarının dayandığı günlük satırın işlem günü.
curl — fund profile · scope quotes:fund
curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/funds/fund:TLY/profile"
response (abridged, illustrative values)
{
  "instrument_id": "fund:TLY",
  "code": "TLY",
  "fund_type": "Serbest Fon",
  "product_type": "mutual_fund",
  "tefas_status": "open",
  "befas_status": null,
  "status_text": "TEFAS'ta İşlem Görüyor",
  "management_fee_source": "reported",
  "shares_outstanding": "24394721",
  "share_ceiling": "1000000000",
  "total_share_count": "1000000000",
  "occupancy_pct": "2.4395",
  "occupancy_flag": null,
  "occupancy_note": null,
  "occupancy_as_of": "2026-09-15",
  ...
}

Performans & risk

Her fonun NAV geçmişinden günlük önceden hesaplanır: standart pencerelerde (1a/3a/6a/YBB/1y/3y/5y) noktadan-noktaya getiriler, yıllık volatilite, maksimum düşüş ve Sharpe/Sortino. Getiri/volatilite/düşüş yüzdedir; Sharpe/Sortino yapılandırılabilir bir risksiz faiz oranı kullanır ve bu oran her yanıtta risk_free_rate olarak döner, böylece varsayım açıktır. NAV toplam-getiriye sadıktır (TR fon birim fiyatları biriktiricidir — gelir fiyata yansır, ayrı dağıtım yoktur).

1w ve 9m anahtarları farklı bir kaynaktan gelir: sağlayıcının raporladığı (TEFAS ile tutarlı) değerlerdir ve tarihleri provider_returns_as_of alanındadır. Diğer anahtarlar PortGate tarafından hesaplanır ve tarihi as_of'tur. Kaynağında fona ait satır yoksa anahtar hiç gelmez; satır var ama değer yoksa null gelir.

curl — fund performance & risk · scope history
curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/funds/fund:TLY/performance"
nav-history ?currency= kabul eder — nav ve net_asset_value candles/eod gibi çevrilir, yanıtta fx_rate/fx_as_of ile.

Sıralama

Fon başına bir performans çağrısı yerine, tüm TR fonlarını tek çağrıda bir dönemdeki getiriye göre sıralayın.

AlanTürNotlar
periodstring1w · 1m · 3m · 6m · 9m · ytd · 1y · 3y · 5y. Varsayılan 1y.
typestringİsteğe bağlı filtre: bir ürün tipi (mutual_fund | pension_fund | etf | venture_capital_fund | real_estate_fund; etf şu an hiçbir fonla eşleşmez) ya da sağlayıcının fon kategorisi; büyük/küçük harf duyarsız tam eşleşme (ör. Serbest Fon, Hisse Senedi Fonu).
limitint 1–100Döndürülecek satır, 1–100. Varsayılan 50.
orderdesc | ascdesc = en iyi önce (varsayılan), asc = en kötü önce.
curl — fund ranking · scope quotes:fund
curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/funds/ranking?period=1y&type=mutual_fund&limit=20"
response (abridged, illustrative values)
{
  "period": "1y",
  "order": "desc",
  "type": "mutual_fund",
  "as_of": "2026-09-15",
  "total": 1850,
  "entries": [
    {
      "rank": 1,
      "instrument_id": "fund:TLY",
      "code": "TLY",
      "name": "TERA BİRİNCİ SERBEST",
      "product_type": "mutual_fund",
      "fund_type": "Serbest Fon",
      "return_pct": "1334.88",
      "nav": "10133.51",
      "investor_count": 102462
    },
    ...
  ],
  "currency": "TRY"
}
Getiriler, en son günlük anlık görüntüdeki (as_of) sağlayıcının hazır değerleridir; bu yüzden TEFAS'ta görünenle eşleşir — hesaplanan /performance değerlerinden biraz farklı olabilir. Dönem için değeri olmayan fonlar (ör. 5y için fazla genç) dışarıda kalır; total, type filtresinden sonra sıralanan fon sayısıdır. Eşitlikte fon koduna göre sıralanır. Anlık görüntü henüz yoksa yanıt hata değil, as_of: null ile boş bir entries listesidir. ~15 dk önbelleklenir.

Yatırımcı akışları

Bir fona günlük yatırımcı para giriş ve çıkışı (nakit giriş/çıkışı) — alımlar eksi geri satımlar, getiri değil. Fiyat artışı asla akış sayılmaz.

İşlem günü başına: net_flow_try = (shares_t − shares_t−1) × price_t (TRY), ayrıca fonun günlük dolaşımdaki pay serisinden hesaplanan shares_delta ve investor_count_delta.

AlanTürNotlar
fromdate (YYYY-MM-DD)Aralık başı, dahil. Varsayılan: to − 30 gün.
todate (YYYY-MM-DD)Aralık sonu, dahil. Varsayılan: bugün. Aralık en fazla 1830 gündür (daha geniş → 422).
windowrange | 1w | 2w | 1msummary'nin hangi günleri topladığı. Verilmezse ya da range (varsayılan) = tam olarak dönen noktalar, from..to. 1w / 2w = to'ya kadarki son 5 / 10 işlem günü; 1m = to tarihine kadarki son işlem gününün ay başından itibaren toplamı (ör. to=2026-09-10 → 2026-09-01..09-10), son 30 gün değil. 1w / 2w / 1m, pencere from'dan önce başlasa bile ihtiyaç duyduğu veriyi okur.

Şu günler suspect: true olarak işaretlenir ve özet toplamlarından çıkarılır: birim fiyatın günden güne %25'ten fazla oynadığı günler (suspect_reason: price_move — bölünme, yeniden değerleme ya da veri hatası) ve iki taraftan birinde sıfır paylı yer tutucu satır bulunan günler (zero_shares). Şüpheli satırlar yine de döner, böylece seride sessiz boşluk olmaz; özet bunları suspect_days içinde sayar.

200 yanıtlarında summary her zaman vardır: varsayılan olarak from..to döneminin toplamıdır (window: "range"). İçeriği: start_date / end_date (penceredeki ilk ve son işlem günü, veri yoksa null), trading_days (şüpheli günler dahil), şüpheli olmayan günler üzerinden net_flow_try, shares_delta ve investor_count_delta toplamları ve suspect_days.

Tüm değerler net akıştır (alımlar eksi geri satımlar). Kaynak brüt alım ve geri satımları değil, dolaşımdaki pay sayısını yayımlar; bu yüzden brüt değerler türetilemez.
curl — investor flows · scope history
curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/funds/fund:AFA/investor-flows?from=2026-07-07&to=2026-07-10"
response (abridged)
{
  "instrument_id": "fund:AFA",
  "currency": "TRY",
  "points": [
    {
      "date": "2026-07-07",
      "net_flow_try": "-4277961.871288",
      "shares_delta": "-3543524",
      "investor_count_delta": -35,
      "price": "1.207262",
      "shares_outstanding": "4235932017",
      "investor_count": 45038,
      "suspect": false,
      "suspect_reason": null
    },
    ...
  ],
  "summary": {
    "window": "range",
    "start_date": "2026-07-07",
    "end_date": "2026-07-10",
    "trading_days": 4,
    "net_flow_try": "-21237706.568717",
    "shares_delta": "-17570061",
    "investor_count_delta": -63,
    "suspect_days": 0
  }
}

Bilinmeyen bir fon kodu 404 değil, boş bir points listesi (ve sıfır özet) döndürür.

Açıklama verisi nasıl işler

Fon portföyleri aylık olarak, fon fon yayımlanır (TEFAS açıklama döngüsü): fonların kabaca yarısı ayın 3'üne, ~%90'ı ise 7'sine kadar yayımlanmış olur. period değeri YYYYMM biçimindedir; belirtmediğinizde her fonun en son açıkladığı dönemi sunarız; bu dönem ayın başında fonlar arasında farklılık gösterebilir.

Boru hattı, yukarı akış ölçek kusurlarına (×100 şişirilmiş değerler, baz-puan/yüzde karışıklıkları) karşı NAV çıpalı kapılarla savunur — doğrulamayı geçemeyen bir dönem yanlış sunulmak yerine sunulmaz.

Fon NAV'ı data_delay_seconds: 0 taşır çünkü doğası gereği gün sonudur (canlı bir tik değil) — gerekçesi veri ve tazelik politikasında.

Örnek — ASELS'i kim tutuyor?

curl — holders-of · scope funds:analytics
curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/funds/holders-of/bist:ASELS"
response (abridged, illustrative values)
{
  "instrument_id": "bist:ASELS",
  "holders": [
    {"fund_code": "AFA", "period": "202608", "weight_pct": "4.25", "value": "125000000.5", "quantity": "400000"},
    {"fund_code": "TGE", "period": "202608", "weight_pct": null, "value": null, "quantity": null},
    ...
  ],
  "note": "funds whose LATEST disclosed portfolio contains the instrument"
}

Her tutan, açıklama dönemini ve pozisyonunu taşır: weight_pct (o fonun portföyündeki pay, yüzde), value (TRY) ve quantity. Pozisyon büyüklüğü henüz mevcut değilse bu üç alan null'dır.

Bir tutanın tüm portföyü için /v1/funds/{CODE}/holdings çağırın.