Resmi KAP akışı

KAP'ın kendi bildirimleri, birebir: tüm bildirim tipleri, her alan KAP'ın (Kamuyu Aydınlatma Platformu) yayımladığı haliyle. Yapay zeka yok; yeniden yazma, çeviri ya da özetleme yok.

Bu bildirimlerin yayımlandıkça size itilmesini mi istiyorsunuz? KAP WS akışına bakın →

KAP haber akışı değildir
Bu, haber tabanlı KAP akışından (/v1/kap; news_id ile, yapay zeka özet bloğu taşır) farklı bir kaynaktır — bkz. KAP haber akışı. Kimlikler birbirine taşınmaz: burada disclosure_index kullanın.

Uç noktalar

/v1/kap-feed uç noktaları resmi KAP veri yayınını sunar: tüm bildirim tipleri (FR, ODA, DG, DUY, CA, FON). KAP her bildirimi ardışık ve boşluksuz bir disclosure_index ile numaralar; liste, detay, içerik ve WebSocket akışı için sabit anahtar budur. Kapsam: kap (KAP haber akışıyla aynı kapsam); her çağrı diğer REST çağrıları gibi ölçülür.

Uç noktaKapsamAçıklama
GET/v1/kap-feed/disclosures?symbol=&symbols=&companyId=&type=&class=&reason=&from=&to=&order=&cursor=&limit=kapBildirim listesi: filtreler, tüm akışta tarih aralığı, tek çağrıda birden çok sembol, order=asc|desc, imleçle sayfalama
GET/v1/kap-feed/disclosures/{index}kapTek bildirim: KAP üst verileri, ekler, FR kalemleri, has_body / body_format
GET/v1/kap-feed/disclosures/{index}/body?format=fields|kap|htmlkapBildirim içeriği, KAP'ın sunduğu haliyle: düz alan listesi, KAP'ın ham yapısı ya da KAP'ın HTML belgesi olarak
GET/v1/kap-feed/financials/{symbol}?basis=&unit=&as_of=&consolidation=&year=&period=&cursor=&limit=kapKAP XBRL'den mali tablolar, üç bazda (as_reported, tufe_adjusted, yiufe_adjusted)
GET/v1/kap-feed/companies/{symbol}kapKAP şirket künyesi: kimlik, sektör, sermaye, fiili dolaşımdaki pay, ortaklar, pay grupları, yönetim kurulu ve yöneticiler
WS/v1/kap-feed/streamkapAynı bildirimler yayımlandıkça WebSocket üzerinden — KAP WS sayfasına bakın

Deneme Alanı'nda deneyin →

Bildirimleri listeleyin

GET /v1/kap-feed/disclosures, gönderdiğiniz tüm filtrelerle (VE) eşleşen bildirimleri döner; varsayılan olarak en yeni önce. Her sayfa items, count ve next_cursor taşır.

AlanTürNotlar
symbolstringTek bir KAP kodu ya da BIST sembolü; öneksiz ya da bist:/fund: kimliği olarak (THYAO, bist:THYAO, fund:UPG). KAP'ın başka bir kodla bildirim yaptığı sembol o şirketin bildirimlerini okur (VAKBN → TVB).
symbolsstring (CSV, ≤ 20)Virgülle ayrılmış birden çok kod: symbols=THYAO,ASELS (1 ile 20 arası, her biri symbol gibi yazılır). Sonuçlar yayım zamanına göre tek listede birleşir, her bildirim bir kez. symbol ile birlikte kullanılamaz (400). Hatalı biçimli bir kod, o kodu adlandıran bir 400'dür; biçimi doğru ama KAP'ta olmayan bir kod sonuca bir şey eklemez.
companyIdstringKAP şirket kimliği.
typeFR | ODA | DG | DUY | CA | FONFR · ODA · DG · DUY · CA · FON (ÖDA ve DKB de kabul edilir).
classstringSunulduğu haliyle KAP bildirim sınıfı.
reasonNEW | UPD | CORR | CANCNEW · UPD · CORR · CANC.
fromdate | datetimeYayım zamanı için dahil alt sınır. Tarih (2026-09-15) Türkiye saatiyle tüm günü ifade eder; ofsetsiz tarih-saat Türkiye saati (UTC+3) olarak okunur. Yanıtlardaki published_at UTC'dir.
todate | datetimeDahil üst sınır, aynı biçimler. from, to'dan sonraysa 400.
orderdesc | ascdesc (varsayılan, en yeni önce) ya da asc (en eski önce). Her filtre birleşimiyle çalışır.
cursorstringÖnceki sayfanın next_cursor değeri.
limitinteger1–100, varsayılan 25.
Tüm akışta tarih aralığı
from ve/veya to tek başına çalışır; symbol, symbols, companyId ya da type gerekmez: from=2026-10-01&to=2026-10-03 o aralıkta yayımlanan tüm bildirimleri, tüm tiplerde döner ve doğrudan sayfalar — boş sayfalar arasında dolaşma yok. Hiç tarih ya da filtre vermezseniz en son bildirimleri alırsınız.
Sayfalama güvencesi
next_cursor null olana kadar izleyin: eşleşen her bildirimi tam bir kez, istediğiniz sırayla alırsınız. Bir sayfa limit'ten az öğe — hatta sıfır — içerirken next_cursor yine dolu olabilir; bu son değildir. Yalnızca next_cursor: null bitti demektir. Her imleçle aynı filtreleri ve aynı order değerini gönderin: farklı bir sorguyla (farklı order dahil) kullanılan imleç 400'dür.

Örnek — iki şirketin 1 Ekim'den bu yana tüm özel durum açıklamaları, en eski önce

curl -G -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/kap-feed/disclosures" \
  --data-urlencode "symbols=THYAO,ASELS" \
  --data-urlencode "type=ODA" \
  --data-urlencode "from=2026-10-01" \
  --data-urlencode "order=asc" \
  --data-urlencode "limit=100"

# next page: repeat the same query and add
#   --data-urlencode "cursor=<next_cursor>"
# stop when next_cursor is null

Tek bildirim

GET /v1/kap-feed/disclosures/{index} tek bir bildirimi döner: liste alanları, ekler (kısa ömürlü imzalı indirme bağlantıları) ve finansal raporlarda (FR) dönem bağlamlarıyla ayrıştırılmış tüm XBRL kalemleri. İki alan içeriğin olup olmadığını söyler:

AlanTürNotlar
has_bodybooleanBildirim içeriği saklanmışsa ve GET …/body onu dönecekse true.
body_formatflatData | presentation | html | nullKAP'ın içeriği hangi biçimde gönderdiği: flatData (olay formları, ör. pay geri alımları), presentation (şablon formlar), html (işlenmiş HTML belgesi; KAP yapısal form göndermediğinde) ya da içerik yoksa null.
curl (scope: kap)
curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/kap-feed/disclosures/1671665"
200 (excerpt)
{
  "disclosure_index": 1671665,
  "type": "CA",
  "reason": "UPD",
  "related_index": 1671010,
  "published_at": "2026-10-03T09:56:03Z",
  "symbols": ["PCILT"],
  "subject": {"tr": "Payların Geri Alınmasına İlişkin Bildirim",
              "en": "Notification Regarding Share Buy-Back"},
  "link": "https://www.kap.org.tr/Bildirim/1671665",
  "attachments": [],
  "has_body": true,
  "body_format": "flatData",
  ...
}

Bildirim içeriği

GET /v1/kap-feed/disclosures/{index}/body bildirimin içeriğini — KAP'ın yayımladığı her form alanını ve tablo satırını — format= ile seçilen üç biçimden birinde döner. İçerik listede ve WebSocket karesinde yer almaz; ihtiyaç duyduğunuzda bildirim başına alın.

Değerler KAP'ın kendi metinleridir, dokunulmaz
PortGate içerikte tür dönüşümü, çeviri, özetleme ya da yeniden yazma yapmaz. Tarihler, sayılar ve bayraklar KAP'ın yayımladığı metinler olarak gelir ("30.136", "0.08450", "true"); ayrıştırmayı siz yapın. Birim etikettedir, ör. Sermayeye Oranı (%) — oradaki "0.08450" yüzde 0,0845 demektir. Serbest metin alanları (Ek Açıklamalar gibi) HTML içerebilir; olduğu gibi korunur.
AlanTürNotlar
format=fieldsdefaultVarsayılan. İçerik düz bir alan listesine açılır: {key, label: {tr, en}, value: {tr, en}, group?, row?}. key, KAP'ın kendi alan adıdır. Tablo satırları group (tablonun adı) ve row (sabit, 0'dan başlayan satır numarası) taşır. KAP yalnızca bir dil verdiyse tr ya da en null olabilir; dilden bağımsız bir değer ikisinde de görünür.
format=kaprawKAP'ın ham içeriği, birebir: {disclosure_index, format, source_format, file_type, body}. KAP'ın kendi yapısını istediğinizde ya da fields_status unsupported olduğunda kullanın.
format=htmlhtml onlyYalnızca içeriği HTML belgesi olan bildirimler için (body_format: html): {disclosure_index, format, html: {tr, en}}, KAP'ın belgesi metin olarak. Diğer içeriklerde, kullanılabilir biçimleri listeleyen bir 400'dür.

Örnek — PCILT pay geri alımı (1671665 numaralı bildirim), format=fields

Önce formun üst düzey alanları gelir (burada yönetim kurulu karar tarihi), ardından işlem tablosu: group detailsList, her işlem için bir satır. 0. satır 2026-09-15 tarihli işlemdir.

curl (scope: kap)
curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/kap-feed/disclosures/1671665/body?format=fields"
200 — format=fields (excerpt)
{
  "disclosure_index": 1671665,
  "format": "fields",
  "source_format": "flatData",
  "fields_status": "ok",
  "fields": [
    {"key": "boardDecisionDate",
     "label": {"tr": "Yönetim Kurulu Karar Tarihi", "en": "Board Decision Date"},
     "value": {"tr": "2026-09-14", "en": "2026-09-14"}},
    ...
    {"key": "transactionDate", "group": "detailsList", "row": 0,
     "label": {"tr": "İşlem Tarihi", "en": "Transaction Date"},
     "value": {"tr": "2026-09-15", "en": "2026-09-15"}},
    {"key": "nominalValueOfSharesSubjectToTransaction", "group": "detailsList", "row": 0,
     "label": {"tr": "İşleme Konu Payların Nominal Tutarı (TL)",
               "en": "Nominal Value of Shares Subject to Transaction (TRY)"},
     "value": {"tr": "100000", "en": "100000"}},
    {"key": "ratioToCapital", "group": "detailsList", "row": 0,
     "label": {"tr": "Sermayeye Oranı (%)", "en": "Ratio To Capital (%)"},
     "value": {"tr": "0.08450", "en": "0.08450"}},
    {"key": "transactionPrice", "group": "detailsList", "row": 0,
     "label": {"tr": "İşlem Fiyatı (TL/Adet)", "en": "Transaction Price (TRY / Unit)"},
     "value": {"tr": "30.136", "en": "30.136"}},
    ...
  ]
}
200 — format=kap (shape)
{
  "disclosure_index": 1671665,
  "format": "kap",
  "source_format": "flatData",
  "file_type": "data",
  "body": [ ... KAP's flatData, exactly as KAP sent it ... ]
}
200 — format=html (shape; HTML bodies only)
{
  "disclosure_index": ...,
  "format": "html",
  "html": {"tr": "<!DOCTYPE html>...", "en": null}
}

fields_status

AlanTürNotlar
okfields_statusİçerik açıldı; fields onu taşır.
unavailablefields_statusİçerik bir HTML belgesidir, açılacak yapı yoktur: fields []. format=html kullanın.
unsupportedfields_statusKAP, PortGate'in henüz açmadığı bir yapı kullanmış: fields []. İstek yine başarılıdır; format=kap içeriği döner.
Finansal raporlar (FR)
FR bildirimlerinde içerik XBRL tablolarıdır. Bunlar detayın kendisiyle (facts, contexts) ve /v1/kap-feed/financials/{symbol} üzerinden gelir; bu yüzden FR bildirimlerinde normalde has_body: false olur ve /body 404 döner.

Hatalar

AlanTürNotlar
400statusHTML olmayan bir içerik için format=html (mesaj kullanılabilir biçimleri listeler).
404statusBu numarada bildirim yok ya da bildirimin saklanmış içeriği yok (bir FR bildirimi — detaydaki facts'i kullanın — ya da içeriği mevcut olmayan bir bildirim). Hatanın detail alanı hangisi olduğunu söyler.
502statusSaklanan içerik okunamadı. Yeniden denemeyle düzelmez — disclosure_index ile destek ekibine bildirin.
503statusİçerik deposu geçici olarak kullanılamıyor — geri çekilmeyle yeniden deneyin.

Hatalar standart RFC 7807 problem gövdesini kullanır; bkz. Hatalar ve hız limitleri.

Mali tablolar ve şirket künyesi

GET /v1/kap-feed/financials/{symbol} XBRL tablolarını dönem dönem sunar; dönem başına bir bildirim, en yeni önce. GET /v1/kap-feed/companies/{symbol} KAP şirket künyesini sunar. İkisi de öneksiz ya da bist: kimliği olarak bir BIST sembolü veya KAP kodu alır. Etkileşimli API referansı tüm parametreleri ve alanları listeler.

AlanTürNotlar
basisas_reported | tufe_adjusted | yiufe_adjustedas_reported (varsayılan): her değer bildirildiği haliyle. tufe_adjusted / yiufe_adjusted: PortGate TL tutarlarını TÜFE ya da Yİ-ÜFE endeksiyle hedef ayın satın alma gücüne taşır — bildirilen rakamlar üzerinde düz aritmetik, yapay zeka yok. TMS-29 uygulamayan şirketler (ör. bankalar, sigortacılar) düzeltilmeden, tms29_applied: false işaretiyle döner.
unitone | thousand | millionone (tam TL, varsayılan) · thousand · million. Hisse başı tutarlar ve parasal olmayan kalemler hiçbir zaman ölçeklenmez.
as_ofYYYY-MMYalnızca düzeltilmiş bazlarda: hedef ay, YYYY-MM, çeyrek sonu ayları (03/06/09/12). Varsayılan: endeks değeri yayımlanmış en son çeyrek sonu ayı.
consolidationconsolidated | solo | CS | NCconsolidated (varsayılan; yalnızca solo bildirilmişse solo) · solo (yalnızca konsolide bildirilmişse konsolide) · CS / NC (yalnızca o).
year · periodstringBildirildiği haliyle mali yıl ve KAP'ın dönem etiketi, ör. 2025 ve Yıllık ya da 6 Aylık.
limitintegerSayfa başına dönem (bildirim) sayısı: 1–12, varsayılan 4. Devamı için next_cursor'ı izleyin.
curl (scope: kap)
curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/kap-feed/financials/ASELS?limit=4"

curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/kap-feed/financials/ASELS?basis=tufe_adjusted&unit=million&limit=4"

curl -H "X-API-Key: $PORTGATE_KEY" \
  "https://api.theportfoy.com/portgate/v1/kap-feed/companies/THYAO"

Geçmiş kapsamı

Finansal raporlar (FR) Ocak 2020'ye kadar uzanır. Diğer bildirim tiplerinin geçmişi yükleniyor ve son 12 ayı kapsayacak; yükleme bitene kadar bu tiplerde eski tarih aralıkları KAP'ta yayımlanandan daha az bildirim dönebilir.

Eski /v1/kap/… yolları (kullanımdan kaldırılıyor)

Resmi akış önceden /v1/kap/ altındaydı. Bu yollar aynı davranışla çalışmaya devam eder, ancak /v1/kap-feed/… lehine kullanımdan kaldırılmaktadır (deprecated) — uygun olduğunuzda geçiş yapın:

old → new
GET /v1/kap/disclosures            →  GET /v1/kap-feed/disclosures
GET /v1/kap/disclosures/{index}    →  GET /v1/kap-feed/disclosures/{index}
GET /v1/kap/financials/{symbol}    →  GET /v1/kap-feed/financials/{symbol}
GET /v1/kap/companies/{symbol}     →  GET /v1/kap-feed/companies/{symbol}
WS  /v1/kap/stream                 →  WS  /v1/kap-feed/stream

Eski yollardaki REST yanıtları Deprecation: true ve yeni yolu gösteren bir Link başlığı (rel="successor-version") taşır. Haber tabanlı /v1/kap ve /v1/kap/{news_id} (KAP haber akışı) bundan etkilenmez.