BIST hisseleri
Borsa İstanbul hisseleri: tüm evren üzerinde 15 dakika gecikmeli fiyatlar (POİP/İZL tek-fiyat segmentleri dahil 649 sembol), 5 dakikalık gün içi barlar ve derin günlük geçmiş.
Uç noktalar
| Uç nokta | Kapsam | Açıklama |
|---|---|---|
| GET/v1/quotes/bist:{SYM} | quotes:bist | Tek fiyat (toplu: GET /v1/quotes?ids=…, ≤100 kimlik) |
| GET/v1/candles/bist:{SYM}?resolution=5m|1d | history | Gün içi 5dk (yaklaşık son 7 gün) veya günlük barlar |
| GET/v1/eod/bist:{SYM}?from=&to= | history | Gün sonu kayıtları (2024'ten itibaren geçmiş) |
| GET/v1/markets/bist/status | any key | Seans saati (10:00–18:00 TRT) |
| GET/v1/markets/bist/movers | quotes:bist | Evren genelinde yükselenler / düşenler / en çok işlem görenler |
| GET/v1/stocks/bist:{SYM}/indicators?indicators=&periods= | history | Kendi barlarımız üzerinde teknik göstergeler (RSI, MACD, Bollinger, SMA/EMA, …) |
| GET/v1/stocks/bist:{SYM}/financials?timeframe=¤cy= | history | Finansal tablolar (lisanslı veri dağıtıcısı üzerinden KAP bildirimleri): yıllık, çeyreklik (bildirildiği gibi kümülatif) ve türetilmiş quarterly_standalone ile ttm |
| GET/v1/stocks/bist:{SYM}/valuation?currency= | history | Değerleme metrikleri: piyasa değeri, F/K, PD/DD, FAVÖK, net borç, FD, FD/FAVÖK (TTM), kâr büyümesi, PEG; ?currency=USD|EUR |
| GET/v1/valuation?ids=¤cy= | history | Aynı değerleme yanıtı, tek çağrıda en fazla 100 bist: kimliği için |
| GET/v1/stocks/bist:{SYM}/valuation/history?from=&to= | history | Günlük piyasa değeri + F/K serisi (işlem günleri, 2025-09-20'den itibaren; yalnızca TRY) |
| GET/v1/stocks/bist:{SYM}/dividends | history | Temettü geçmişi: hisse başına net + brüt tutar, hak kullanım tarihi, ödeme tarihi, taksit — bkz. Temettüler |
| GET/v1/dividends?market=bist&from=&to=&date_field=&status=&symbols= | history | Bir tarih aralığındaki tüm BIST temettüleri (hak kullanım ya da ödeme tarihi), sayfalı — bkz. Temettüler |
Sektör üyeliği
Her BIST enstrüman kaydı (/v1/instruments, /v1/instruments/{id}) sector ve sector_code taşır: hissenin ait olduğu Portföy sektörü (Türkçe adı ve /v1/sectors'ta kullanılan slug, ör. bankacilik, holdingler — aynı 30 kod). Hisse hiçbir sektörde değilse ikisi de null'dır. ABD enstrümanlarında bu iki alan eski anlamını korur: SIC sektör açıklaması ve kodu. Bir sektörün üyeleri /v1/sectors/{code}/constituents altındadır — bkz. Sektör analitiği.
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/instruments/bist:AKBNK"
# → { …, "sector": "Bankacılık", "sector_code": "bankacilik" }Teknik göstergeler
Kendi BIST barlarımız üzerinde on gösterge — RSI, MACD, Bollinger, SMA, EMA (+ ROC, OBV, ATR, ADX, Stochastic). Varsayılan set (rsi,macd,bbands,sma,ema; periyotlar 20/50/200) günlük olarak önceden hesaplanır ve anında sunulur; özel seçimler aynı matematikle anlık hesaplanır. Bar bazlı yüksek/düşük gerektiren göstergeler (ATR/ADX/Stochastic) BIST günlük barlarında unavailable altında raporlanır (uydurulmaz) — bunlar için resolution=5m kullanın.
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/stocks/bist:THYAO/indicators"Finansal tablolar
KAP'a bildirilen gelir tablosu, bilanço ve nakit akışı (lisanslı veri dağıtıcısı aracılığıyla). 2024 ve sonrası TMS-29 enflasyona göre düzeltilmiş, 2023 ve öncesi nominaldir — her dönem kendi basis değerini taşır. Yıllar arası karşılaştırma için currency=USD isteyin. timeframe=annual|quarterly (çeyreklik değerler bildirildiği gibi yıl-başından-bugüne kümülatiftir).
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/stocks/bist:AEFES/financials?timeframe=annual¤cy=USD"Bir tablonun hangi sürümü: ?basis=
basis parametresi (yalnızca BIST) bir bildirilmiş tablonun hangi sürümünü aldığınızı seçer. Varsayılan — current — değerin bugün itibarıyla durduğu halidir: kaynağımız geçmiş dönemleri zaman içinde ileriye doğru yeniden ifade eder, dolayısıyla eski bir dönem en yeni ölçü biriminde gösterilir. Sunulan her dönem yine kendi inflation_adjusted / nominal esas etiketini taşır.
?basis=as_reported size her dönemi İLK BİLDİRİLDİĞİ HALİYLE verir; sonraki herhangi bir revizyon ya da yeniden ifadeden bağımsız. Dürüst sınırı bilin: bu anlık görüntü yalnızca ileriye doğru alınır (yeni bildirimlerin ilk görüldüğü andan itibaren), bu yüzden seyrektir — çoğu eski dönemin henüz as-reported satırı yoktur ve geriye doldurulmak yerine periods'tan basitçe eksiktir. annual ve quarterly zaman aralıklarını kapsar; türetilmiş quarterly_standalone / ttm bunun üzerinde hesaplanmaz (bunları istemek dürüst bir boş seri döner). Her as_reported yanıtı bunu açıklayan bir methodology notu taşır. us: tablolar doğaları gereği ilk-bildirildiği-gibidir; dolayısıyla bir us: kimliğinde basis 400 döner.
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/stocks/bist:AEFES/financials?timeframe=annual&basis=as_reported"{
"instrument_id": "bist:AEFES", "currency": "TRY",
"timeframe": "annual", "basis": "as_reported",
"methodology": "basis=as_reported returns each period's figures AS FIRST FILED …",
"periods": [],
"count": 0
}Bugün itibarıyla anlık görüntü henüz boştur — ilk-bildirilmiş hiçbir satır gelmedi — bu yüzden periods [] döner. Bir sonraki bildirim döneminden itibaren dolmaya başlar.
Türetilmiş dönemler: quarterly_standalone ve ttm
Şirketler çeyrekleri kümülatif bildirir (Q2 = ilk altı ay). İki timeframe bu çıkarmayı sizin yerinize yapar. quarterly_standalone her 3 aylık çeyreği tek başına verir: Q1 bildirildiği gibi, Q2 = 6A − 3A, Q3 = 9A − 6A, Q4 = tam yıl − 9A. ttm son on iki ayı verir: son tam yıl + bu yılın yıl-başından-bugüne değeri − geçen yılın aynı dönemi. İkisi de şirketin yayımladığı değil, PortGate'in hesapladığı değerlerdir: her dönem derived: true taşır, formülünü ve hesaba giren source_periods listesini gösterir; yanıtta bir methodology metni bulunur. Yalnızca akım kalemleri türetilir (gelir tablosu ve nakit akışı); bilanço kalemleri en son girdinin bildirildiği halidir, hisse başına kalemler çıkarılır.
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/stocks/bist:THYAO/financials?timeframe=quarterly_standalone&limit=3"{
"instrument_id": "bist:THYAO", "currency": "TRY",
"timeframe": "quarterly_standalone", "derived": true,
"methodology": "Derived by PortGate from the filed rows — NOT a source observation …",
"periods": [
{"fiscal_period": "Q2", "fiscal_year": "2026", "end_date": "2026-06-30",
"basis": "inflation_adjusted", "derived": true,
"formula": "quarterly#2026-06 − quarterly#2026-03",
"source_periods": ["quarterly#2026-06", "quarterly#2026-03"],
"null_reason": null,
"items": {"3C": {"value": "327108000000", "label_tr": "Satış Gelirleri", …}, …}},
{"fiscal_period": "Q1", "formula": "quarterly#2026-03", …},
{"fiscal_period": "Q4", "fiscal_year": "2025", "end_date": "2025-12-31",
"formula": "annual#2025-12 − quarterly#2025-09",
"items": {}, "income_statement": {},
"null_reason": "TMS-29 measuring-unit mismatch: the source restates inflation-adjusted annual rows …"}
],
"count": 3
}FY2024'ten itibaren tablolar enflasyona göre düzeltilmiştir (TMS-29). Kaynağımız her yıllık tabloyu en yeni bildiriminin satın alma gücüyle yeniden ifade eder; çeyreklik tablolar ise kendi çeyrek sonunun lirasıyla kalır. Birini diğerinden çıkarmak iki farklı ölçü birimini karıştırır ve kesin görünen ama doğru olmayan bir sayı üretir. Bu yüzden FY2024'ten itibaren yıllık bir satırı çeyreklik bir satırla asla birleştirmeyiz: tek başına Q4 ve Q1–Q3'teki TTM boş tablolar ve bunu söyleyen bir null_reason ile döner. Tek başına Q1–Q3 yine türetilir, yıl sonundaki TTM doğrudan yıllık satırdır ve 2023 ve öncesi (nominal) tüm dönemler eksiksiz türetilir.
Bir çeyrek türetilebildiğinde bile her bildirim kendi dönem sonu lirasıyladır; bu yüzden tek başına bir çeyrek, birbirinden biraz farklı iki birimi çıkarır ve fark iki tarih arasındaki enflasyonla büyür. Eksik bir girdi dönemi ya da farklı muhasebe esası veya şablondaki girdiler de boş tablo ve null_reason üretir — asla karışık bir rakam değil. USD rakamları kendi USD serisinden ayrıca türetilir.
source kaynak bilgisi esastır.Değerleme metrikleri
Piyasa değeri (ham TRY, ayrıca milyar cinsinden değer ve büyüklük kovası) ile F/K, işlem günlerinde 5 dakikada bir güncellenerek lisanslı veri dağıtıcımızdan aynen geçirilir. Geri kalan her şey PortGate tarafından bildirilen tablolardan hesaplanır; sade haliyle:
PD/DD (pb_ratio) = piyasa değeri ÷ ana ortaklığa ait özkaynak
FAVÖK (ebitda) = esas faaliyet kârı + amortisman ve itfa
(en yeni çeyrek, bildirildiği gibi kümülatif)
ebitda_ttm = aynısı, son on iki ay için
net_debt = finansal borçlar − nakit
− kısa vadeli finansal yatırımlar
ev (FD) = piyasa değeri + net_debt (azınlık payları eklenmez)
ev_ebitda = ev ÷ ebitda_ttm (biri ≤ 0 ise null)
eps_growth_pct = ana ortaklığa ait TTM net kârın yıllık büyümesi
peg = F/K ÷ eps_growth_pct (büyüme ≤ 0 ise null)PD/DD, azınlık payları dahil toplam özkaynağa değil, ana ortaklığa ait özkaynağa bölünür — KCHOL gibi bir holdingde bu PD/DD'yi 0,44'ten 0,72'ye taşır. Bankalar ve sigortacılar farklı bir tablo formatıyla (banka/sigorta tablo formatı) bildirir: orada özkaynak satırını etiketinden okur, tabloda ayrıca gösteriliyorsa azınlık paylarını düşeriz (hangi satırların kullanıldığını note söyler); azınlık payını ayrıca göstermeyen sigortacılarda toplam özkaynak kullanılır ve note bunu belirtir. Net borç, FD ve FAVÖK yalnızca sanayi şablonu içindir — bankalar ve sigortacılar için gerekçeli null'dır. Kiralama yükümlülükleri net borca yalnızca şirket bunları finansal borçların içinde raporluyorsa girer.
Hesaplanan bir oran, iki gözlem zamanını dürüstçe karıştırır: tablo tarafı source_period (ör. quarterly#2026-06) ve period_end ile, piyasa verisi tarafı as_of / data_date ile etiketlenir. 2024 ve sonrası tablolar TMS-29 enflasyona göre düzeltilmiştir; bu yüzden PD/DD başka yerlerde yayımlanan rakamlardan farklı olabilir.
null ile birlikte null_reason sunarız, asla sahte bir değer değil. (0.001, 1000) aralığı dışına düşen bir PD/DD de, mantıksız bir sayı yerine null olarak sunulur (girdiler büyük olasılıkla uyumsuzdur).TTM tabanlı alanlar (ebitda_ttm, ev_ebitda, eps_growth_pct, peg) yukarıdaki finansal tablo ttm kurallarını izler: FY2024 ve sonrasında en yeni tablo bir Q1–Q3 bildirimiyken TTM, enflasyona göre yeniden ifade edilmiş bir yıllık satırı bildirildiği gibi kalan çeyreklerle karıştırır; bu yüzden bu dört alan bu gerekçeyle null'dır ve en yeni tablo bir yıl sonu tablosu olduğunda dolar. Büyüme nominaldir, yani enflasyonu içerir. Eski ebitda alanı (en yeni çeyrek, kümülatif) değişmedi.
Her metrik aynı biçimdedir
| Alan | Tür | Notlar |
|---|---|---|
| value | string | null | Tam ondalık metin olarak değer ya da null. |
| null_reason | string | null | value neden null (ör. kaynak sağlamıyor, banka/sigorta tablo formatı, TMS-29 ölçü birimi uyuşmazlığı). value doluysa null. |
| source_period | string | null | Kullanılan tablo dönemi: quarterly#2026-06 (bildirildiği gibi kümülatif) veya ttm#2026-06 (türetilmiş). Yalnızca hesaplanan metriklerde. |
| period_end | date | null | O dönemin tablo tarihi. |
| inputs | object | Hesaba giren rakamların kendisi, ör. {market_cap, equity_attributable_to_parent}. |
| note | string | null | Alan adından anlaşılmıyorsa formül / kalem seçimi. |
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/stocks/bist:THYAO/valuation"{
"instrument_id": "bist:THYAO", "market": "bist", "currency": "TRY",
"source": "licensed-distributor + kap-filings",
"as_of": "2026-08-24T15:32:45Z", "data_date": "2026-08-24",
"market_cap": {"value": "414690000000", "billions": "414.69",
"category": "200-500B TRY", "null_reason": null},
"pe_ratio": {"value": "3.7", "null_reason": null},
"pb_ratio": {"value": "0.41", "null_reason": null,
"source_period": "quarterly#2026-06", "period_end": "2026-06-30",
"inputs": {"market_cap": "414690000000",
"equity_attributable_to_parent": "1018517000000"}},
"ebitda": {"value": "53567000000", "source_period": "quarterly#2026-06", …},
"net_debt": {"value": "620378000000", "source_period": "quarterly#2026-06",
"inputs": {"short_term_financial_debt": "187257000000",
"long_term_financial_debt": "726977000000",
"cash_and_equivalents": "80346000000",
"short_term_financial_investments": "213510000000"},
"note": "net debt = financial borrowings (2AA …) − cash … (1AA) − … (1AB) …"},
"ev": {"value": "1035068000000",
"inputs": {"market_cap": "414690000000", "net_debt": "620378000000"}, …},
"ebitda_ttm": {"value": null, "source_period": "ttm#2026-06",
"null_reason": "TMS-29 measuring-unit mismatch: …",
"note": "TTM = quarterly#2026-06 + annual#2025-12 − quarterly#2025-06"},
"ev_ebitda": {"value": null, "null_reason": "ebitda_ttm unavailable: TMS-29 measuring-unit mismatch: …"},
"eps_growth_pct": {"value": null, "null_reason": "TMS-29 measuring-unit mismatch: …", …},
"peg": {"value": null, "null_reason": "eps_growth_pct unavailable: …"},
"coverage_from": "2025-09-20",
"disclaimer": "…",
"fx_rate": null, "fx_as_of": null
}?currency=USD veya EUR para alanlarını — piyasa değeri (value ve billions), FAVÖK ve parasal girdiler — güncel spot kurla çevirir; kullanılan kur fx_rate ve fx_as_of ile bildirilir. Oranların (F/K, PD/DD, FD/FAVÖK, büyüme, PEG) para birimi yoktur ve asla değişmez. Büyüklük kovası kaynağın TRY kovası olarak kalır; çeyreklik tablo rakamları çeyrek sonu kuruyla değil bugünün kuruyla çevrilir. Günlük geçmiş uç noktası yalnızca TRY'dir: TRY dışında bir ?currency= 422 döner, çünkü her günü dürüstçe çevirmek o günün kurunu gerektirir — istemci tarafında fx:USDTRY günlük barlarıyla çevirin.
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/stocks/bist:KCHOL/valuation?currency=USD"Toplu: GET /v1/valuation?ids= virgülle ayrılmış en fazla 100 bist: kimliği alır ve her biri için tekli uç noktanın yanıtının aynısını istek sırasıyla döner (tekrarlar bir kez yanıtlanır). Başka piyasalardan ya da kapsamı olmayan kimlikler not_found içinde, kimlik başına gerekçe not_found_reasons içinde döner. Boş ya da 100'den fazla kimlik 422'dir. Kimlik başına ölçülür; ?currency= tüm grup için tek kur kullanır.
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/valuation?ids=bist:THYAO,bist:KCHOL,bist:GARAN,us:AAPL"
# → {"valuations": [ …3 entries… ],
# "not_found": ["us:AAPL"],
# "not_found_reasons": {"us:AAPL": "valuation metrics cover bist: instruments only today"}}Geçmiş uç noktası günlük piyasa değeri + F/K serisini artan sırayla, yalnızca işlem günleri olarak sunar (bayat hafta sonu/tatil satırları ayıklanır); varsayılan pencere son 90 gündür (?from=&to=). Kapsam 2025-09-20 tarihinde başlar — öncesindeki boş bir pencere hata değil, dürüst cevaptır.
Bilinmeye değer fiyat alanları
BIST fiyatları günlük fiyat bandını içerir — limit_up / limit_down (tavan/taban) — ayrıca alış/satış, gün OHLC, hacim (lot) ve işlem hacmi (TRY). as_of borsa işlem zamanıdır (İstanbul saati, UTC olarak döndürülür).
Bar anlambilimi (kaynağa sadık)
- 5dk:
closeanlık fiyattır;openbir önceki anlık görüntünün fiyatıdır (türetilmiş); yüksek/düşüknulldeğerindedir (5 dakikalık çözünürlükte gözlenmez);turnoverbar boyunca oluşan gün-işlem-hacmi farkıdır. - 1g: yüksek/düşük/işlem hacmi/işlem sayısı gerçek seans değerleridir;
opendeğerinull— kaynak depo bir BIST seans açılışı tutmaz.
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/candles/bist:THYAO?resolution=1d¤cy=USD"Bir alanın neden tahmin edilmek yerine null olduğunu ve 15 dakikalık gecikmenin her piyasada nasıl işlediğini: Veri ve tazelik politikası.
Tek-fiyat segmentleri
price_mechanism: "auction" taşır; böylece bunları doğru gösterebilirsiniz (sabitlemeler arasındaki düz çizgi gerçektir, bayat veri değil).