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ç nokta | Kapsam | Açıklama |
|---|---|---|
| GET/v1/quotes/fund:{CODE} | quotes:fund | Birim başına NAV + günlük değişim |
| GET/v1/funds/{CODE}/profile | quotes:fund | Künye: kurucu, tür, ISIN, risk, ücretler, işlem durumu, stopaj, valör, doluluk |
| GET/v1/funds/ranking?period=&type=&limit=&order= | quotes:fund | Tüm fonlar bir dönemdeki getiriye göre sıralı (1h…5y) |
| GET/v1/funds/{CODE}/nav-history?from=&to=¤cy= | history | Günlük NAV serisi (?currency= NAV'ı çevirir) |
| GET/v1/funds/{CODE}/performance | history | Getiriler (1h…5y), yıllık volatilite, maksimum düşüş, Sharpe & Sortino |
| GET/v1/funds/{CODE}/investor-flows?from=&to=&window= | history | Gü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:analytics | Bir aya ait açıklanan portföy (varsayılan: en son) |
| GET/v1/funds/{CODE}/holdings-history | funds:analytics | Yakı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:analytics | En son açıklamasında bir enstrümanı tutan her fon; ağırlık / değer / adet ile |
| GET/v1/funds/trending?dimension= | funds:analytics | stock | 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.
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:
| Alan | Tür | Notlar |
|---|---|---|
| product_type | string | null | mutual_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_status | string | null | TEFAS işlem durumu: open | closed | suspended. |
| befas_status | string | null | BEFAS işlem durumu (emeklilik fonları): open | closed | suspended; BEFAS'ta olmayan fonlarda null. |
| status_text | string | null | Sağlayıcının durum metni olduğu gibi, ör. “TEFAS'ta İşlem Görüyor”. |
| withholding_type / withholding_rule_code | string | null | Yayımlandığı haliyle stopaj kuralı adı ve kural kodu. |
| withholding_rate | decimal string | null | Gerçek kişi yatırımcılar için stopaj oranı, yayımlandığı haliyle. |
| withholding_rate_corporate | decimal string | null | Tüzel kişi yatırımcılar için stopaj oranı, yayımlandığı haliyle. |
| inception_date | date | null | Halka arz tarihi; yoksa kuruluş tarihi. |
| buy_valor / sell_valor | int | null | Alış / satış valörü, işlem günü cinsinden. |
| cancel_deadline | string | null | Emir iptali son saati (İstanbul, SS:DD). |
| is_participation | bool | null | Katılım (faizsiz) fonu bayrağı. |
| benchmark | string | null | Karşılaştırma ölçütü, olduğu gibi. |
| kap_url | string | null | Fonun KAP bilgi sayfası. |
| management_fee_source | reported | bylaw | null | reported = 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_outstanding | decimal string | null | Dolaşımdaki pay sayısı, en son günlük satırdan. |
| share_ceiling / total_share_count | decimal string | null | Kayıtlı ihraç tavanı (toplam pay sayısı), en son günlük satırdan. total_share_count aynı değeri taşır. |
| occupancy_pct | decimal string | null | Doluluk: 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_flag | string | null | Fon 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_note | string | null | Yalnı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_of | date | null | Doluluk alanlarının dayandığı günlük satırın işlem günü. |
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/funds/fund:TLY/profile"{
"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 -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/funds/fund:TLY/performance"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.
| Alan | Tür | Notlar |
|---|---|---|
| period | string | 1w · 1m · 3m · 6m · 9m · ytd · 1y · 3y · 5y. Varsayılan 1y. |
| type | string | İ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). |
| limit | int 1–100 | Döndürülecek satır, 1–100. Varsayılan 50. |
| order | desc | asc | desc = en iyi önce (varsayılan), asc = en kötü önce. |
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/funds/ranking?period=1y&type=mutual_fund&limit=20"{
"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"
}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.
| Alan | Tür | Notlar |
|---|---|---|
| from | date (YYYY-MM-DD) | Aralık başı, dahil. Varsayılan: to − 30 gün. |
| to | date (YYYY-MM-DD) | Aralık sonu, dahil. Varsayılan: bugün. Aralık en fazla 1830 gündür (daha geniş → 422). |
| window | range | 1w | 2w | 1m | summary'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.
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"{
"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.
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 -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/funds/holders-of/bist:ASELS"{
"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.
