Dönem istatistikleri
Önceden hesaplanmış 1w / 2w / 1m / 3m / 6m / 1y pencereleri — en yüksek, en düşük, başlangıç fiyatı ve değişim — BIST ve ABD hisseleri, fonlar ve emtialar için; ayrıca BIST endeksleri ve Portfoy sektörleri. Hesap üst kaynakta yapılır; bir yıllık mum verisi yerine tek bir satır okursunuz.
Uç noktalar
| Uç nokta | Kapsam | Açıklama |
|---|---|---|
| GET/v1/periodic/{id} | history | Tek enstrüman, altı pencerenin tamamı |
| GET/v1/periodic?ids= | history | Virgülle ayrılmış en fazla 100 kimlik, karışık piyasalar |
| GET/v1/indices/{code}/periodic | history | Tek bir BIST endeksi (XU100, XBANK, …), kodla |
| GET/v1/sectors/{code}/periodic | history | Tek bir sektör: birleşik + ayrı TR ve US ayakları |
Kapsam
Kimlikler her zamanki kanonik biçimdedir. Hangi üst-kaynak varlık tipinin yanıtladığı sizin için çözülür ve yanıt bunu açıkça söyler:
bist:THYAO— BIST hisseleri ve borsa yatırım fonları (BYF'leri listeleyin: /v1/instruments?market=bist&asset_type=ETF&limit=100)us:IBM— ABD hisseleri ve ETF'lerfund:IBM— Türkiye yatırım fonları (TEFAS)cmdty:XGLD— Altın ve diğer emtialarXU100— 30 BIST endeksi — kendi uç noktasında, kodlakimya— 47 Portfoy sektörü — slug ile
index:SPX500 kimliği 404 döner; bir fx kimliği de öyle. Bu bilinçlidir. Üst kaynak bu pencereleri 30 BIST endeksi için — yukarıdaki /v1/indices/{code}/periodic ile sunulur — ve bizim kur paritelerimizden farklı bir kaynaktan, farklı fiyat ve farklı zaman damgalarıyla gelen bir TL kur kodu kümesi için hesaplar. Hiçbiri bizim dünya endeksi ve fx piyasalarımızla aynı sembol uzayı değildir; bu yüzden neredeyse doğru sayılar döndürmek yerine hiçbir şey döndürmüyoruz.Null'lar, sıfırlar ve tazelik
Null, sıfır değildir. Üst kaynak hesaplayamadığı bir değeri 0 yazmak yerine hiç yazmaz; biz de bunu null olarak geçiririz — yani null “değer yok”, 0 ise sayının gerçekten sıfır olduğu anlamına gelir.
Her zaman calculated_at alanını okuyun. Bu satırlar borsa zaman damgası taşımaz, yalnızca yazıcının kendi damgasını taşır; dolayısıyla taze bir satırı donmuş bir satırdan ayıran tek sinyal budur. Hisseler ve endeksler yaklaşık 15 dakikada bir, fonlar 6 saatte bir, sektörler saatlik yeniden hesaplanır.
Eksik bir satır 404'tür, uydurulmuş bir tahmin değil. Bir fiyat akışı bir tur boş döndüğünde enstrümanlar geçici olarak satırsız kalabilir; bu yüzden 404'ü “hiçbir zaman” değil “şu anda değil” olarak yorumlayın.
Yanıt alanları
| Alan | Tür | Notlar |
|---|---|---|
| instrument_id | string | İstediğiniz kimlik, kanonik biçimde geri döner (bist:GLDTR veya bist:GLDTR.F olarak istenen BIST BYF'si bist:GLDTRF olarak yanıtlanır) |
| asset_type | string | Hangi üst-kaynak satırı yanıtladı — US_STOCK, FUND, STOCK, BYF (BIST borsa yatırım fonları, ör. bist:ZPX30F; istisna bist:GMSTRF, üst kaynak onu hisse olarak kayıtladığı için STOCK döner), GOLD, EMTIA |
| current_price | string | null | Pencerelerin ölçüldüğü fiyat |
| calculation_date | date | null | Hesabın kapsadığı iş günü |
| calculated_at | datetime | null | Yazıcının bu satırı en son hesapladığı an — tazelik sinyaliniz |
| periods | object | 1w, 2w, 1m, 3m, 6m, 1y anahtarlarıyla |
| periods[].high / .low | string | null | Pencere içindeki en yüksek / en düşük fiyat |
| periods[].start_price | string | null | Pencerenin başındaki fiyat — değişim buradan ölçülür |
| periods[].change_pct / .change_nominal | string | null | Pencere boyunca değişim, yüzde ve mutlak |
| currency | string | null | Fiyat alanlarının para birimi (bist/fon TRY, us USD, emtia katalogdaki gibi); dürüstçe söylenemiyorsa null |
| fx_rate / fx_as_of | string / datetime | null | Yalnızca ?currency= yanıtı çevirdiğinde dolu: kullanılan spot kur ve gözlem zamanı |
Tüm sayısal değerler JSON string tipindedir; böylece size ulaşana kadar hassasiyet kaybolmaz. Float değil, ondalık (decimal) olarak ayrıştırın.
Örnek — bir ABD hissesi
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/periodic/us:IBM"{
"instrument_id": "us:IBM",
"asset_type": "US_STOCK",
"currency": "USD",
"current_price": "231.835",
"calculation_date": "2026-08-25",
"calculated_at": "2026-08-25T14:11:41.780419",
"periods": {
"1w": {"high": "237.36", "low": "231.01", "start_price": "232.685",
"change_pct": "-0.3653007284526266", "change_nominal": "-0.8499999999999943"},
"2w": {"high": "238.67", "low": "228.32", "start_price": "238.48",
"change_pct": "-2.786397182153632", "change_nominal": "-6.644999999999982"},
"1m": {"high": "238.67", "low": "215.82", "start_price": "215.98",
"change_pct": "7.34095749606446", "change_nominal": "15.855000000000018"},
"3m": {"high": "330.08", "low": "205.86", "start_price": "257.055",
"change_pct": "-9.81112991383167", "change_nominal": "-25.22"},
"6m": {"high": "330.08", "low": "205.86", "start_price": "243.215",
"change_pct": "-4.6789877269082885", "change_nominal": "-11.379999999999995"},
"1y": {"high": "330.08", "low": "205.86", "start_price": "239.43",
"change_pct": "-3.1721171114730815", "change_nominal": "-7.594999999999999"}
}
}?currency= ile çevirme
Her yanıt artık currency alanını taşır: current_price ile her pencerenin high, low, start_price ve change_nominal alanlarının para birimi. Bu alanları güncel spot kurla çevirmek için ?currency=TRY, USD veya EUR ekleyin (tekli ya da toplu); kullanılan kur fx_rate ve fx_as_of ile bildirilir. change_pct bir yüzdedir ve asla çevrilmez. Toplu istekte her yerel para birimi için bir kur alınır.
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/periodic/bist:THYAO?currency=USD"
# → {"instrument_id": "bist:THYAO", "currency": "USD", "current_price": "…",
# "periods": {…high/low/start_price/change_nominal in USD, change_pct unchanged…},
# "fx_rate": "…", "fx_as_of": "…"}Toplu okuma
En fazla 100 kimliği /v1/periodic?ids= uç noktasına verin. Piyasalar karışık olabilir. Satırı olmayan kimlikler, çağrının tamamını başarısız kılmak yerine not_found dizisinde döner; böylece kotasyondan çıkmış tek bir sembol diğer 99'una mal olmaz. Toplu istekler istek başına değil, enstrüman başına ölçülür.
curl -H "X-API-Key: $PORTGATE_KEY" \
"https://api.theportfoy.com/portgate/v1/periodic?ids=us:IBM,fund:IBM,bist:ZPX30F"{
"stats": [
{ "instrument_id": "us:IBM", "asset_type": "US_STOCK",
"current_price": "231.835", "periods": { /* as above */ } },
{ "instrument_id": "fund:IBM", "asset_type": "FUND",
"current_price": "3.905547", "periods": { /* a different row */ } }
],
"not_found": ["bist:ZPX30F"]
}Sektörler: iki uç nokta, iki farklı sayı
Bu, şununla aynı değer değildir: /v1/sectors/{code}/returns. O uç nokta, sektör endeks değerlerinden bir oran olarak burada hesaplanır ve 1w/1m/3m/6m/ytd/1y döneminde çalışır. Bu uç nokta ise üst kaynağın sektör bileşenlerinin ortalamasıdır; 1w/2w/1m/3m/6m/1y döneminde ve Türkiye ile ABD ayakları ayrı ayrı. İki farklı yöntem, aynı sayının iki görünümü değil — farklı çıkmalarını bekleyin ve yöntemi size uyanı seçin.
combined bloğunda bilinçli olarak fiyat alanı yoktur. Bir sektörün fiyatı olmaz; bu yüzden üst kaynağın oraya yazdığı yer tutucu sıfırlar yerine, pencerenin en iyi ve en kötü bileşen getirisini alırsınız.
Her ayak, getirisinin yanında bir sample_count gönderir: 40'ta 2'lik bir örneklem ile 40'ta 40'lık bir örneklem aynı iddia değildir. Aşağıdaki örnekte ABD ayağının 21 bildirdiğine dikkat edin; sektörün 22 ABD bileşeni var — birinin o pencere için kullanılabilir fiyatı yoktu.
{
"code": "kimya", "name_tr": "Kimya", "sector_id": 21,
"tr_constituent_count": 44, "us_constituent_count": 22,
"calculation_date": "2026-08-25",
"calculated_at": "2026-08-25T13:34:35.679277",
"combined": {
"1w": {"change_pct": "2.3122871174622417",
"best_constituent_pct": "20.889748549323013",
"worst_constituent_pct": "-12.90613718411552"}
},
"tr": {"1w": {"change_pct": "2.7418678795640044", "sample_count": 44}},
"us": {"1w": {"change_pct": "1.4122131397252147", "sample_count": 21}}
}Ayrıca bakınız: /docs/sectors · /docs/indices
