/meAnahtarın sahibi, planı ve yetkileri
Örnek yanıt
{ "name": "Ayşe Yılmaz", "plan": "PRO", "baseCurrency": "TRY", "key": { "name": "E-Tablolar", "scopes": ["read"] } }Portföy, varlık ve işlem verilerinize anahtarla erişin. Google E-Tablolar, Excel, Zapier ya da kendi betiklerinizle birleştirin. API Pro planda kullanılabilir.
Ayarlar > Geliştirici sayfasından bir anahtar oluşturun (bk_…). Anahtar yalnızca oluşturulurken bir kez gösterilir; parola gibi saklayın. Her istekte Authorization başlığıyla gönderin:
curl -H "Authorization: Bearer bk_ANAHTARINIZ" \
"https://SİTE/api/public/v1/summary"read) ya da okuma + yazma (write) yetkili olabilir. Yazma yetkisi yalnızca işlem eklemek içindir.?currency=TRY|USD|XAU (varsayılan: hesabınızın görünüm para birimi). Sayılar ham değerdir; biçimlendirme yapılmaz.?format=csv (virgül ayraç, nokta ondalık, UTF-8, ISO tarih) destekler.v1): yeni alanlar eklenebilir, var olan alanlar değişmez ya da kalkmaz.Önemli: Anahtarı tarayıcıdaki (herkese açık) kodda kullanmayın. GET isteklerinde ?key= parametresi yalnızca E-Tablolar’daki IMPORTDATA gibi başlık gönderemeyen araçlar için vardır; adresler günlüklere ve tablo geçmişine yazılabilir, o yüzden bu iş için ayrı, salt okunur bir anahtar kullanın.
Temel adres: https://SİTE/api/public/v1
/meAnahtarın sahibi, planı ve yetkileri
Örnek yanıt
{ "name": "Ayşe Yılmaz", "plan": "PRO", "baseCurrency": "TRY", "key": { "name": "E-Tablolar", "scopes": ["read"] } }/summaryCSVTüm portföylerin birleşik özeti (değer, maliyet, kâr/zarar, günlük değişim)
Örnek yanıt
{ "summary": { "currency": "TRY", "totalValue": 412350.5, "totalCost": 350000, "pnl": 62350.5, "pnlPct": 17.81, "dayChange": 1520.4, "dayChangePct": 0.37, "holdingsCount": 9, "asOf": "2026-10-20T12:00:00.000Z" } }/portfoliosCSVKendi portföylerinizin listesi ve özetleri (ortak portföyler dahil değildir)
Örnek yanıt
{ "currency": "TRY", "portfolios": [ { "id": "cm…", "name": "Ana Portföy", "totalValue": 412350.5, "pnlPct": 17.81, "holdingsCount": 9 } ] }/portfolios/{id}Tek portföyün özeti ve açık pozisyonları
Örnek yanıt
{ "currency": "TRY", "portfolio": { … }, "holdings": [ { "symbol": "THYAO.IS", "quantity": 100, "value": 35120, "pnlPct": 12.4, "weightPct": 8.5 } ] }/portfolios/{id}/holdingsCSVPortföydeki açık pozisyonlar
Örnek yanıt
{ "currency": "TRY", "holdings": [ { "portfolio": "Ana Portföy", "symbol": "THYAO.IS", "name": "Türk Hava Yolları", "quantity": 100, "value": 35120 } ] }/holdingsCSVTüm portföylerdeki açık pozisyonlar tek listede
Örnek yanıt
{ "currency": "TRY", "holdings": [ … ] }/portfolios/{id}/transactionsCSVİşlem geçmişi (yeniden eskiye)
Örnek yanıt
{ "total": 42, "transactions": [ { "id": "cm…", "date": "2026-09-03", "type": "BUY", "symbol": "THYAO.IS", "quantity": 100, "price": 351.2, "fee": 2.5, "currency": "TRY", "note": "Uzun vade" } ] }/portfolios/{id}/transactionswrite yetkisiİşlem ekler (alış, satış, temettü). Uygulamadaki form kuralları geçerlidir; kur işlem gününe göre doldurulur
İstek gövdesi
{ "symbol": "THYAO.IS", "type": "BUY", "quantity": 10, "price": 351.2, "fee": 0, "date": "2026-10-20", "note": "Aylık birikim" }Örnek yanıt
{ "transaction": { "id": "cm…", "symbol": "THYAO.IS", "type": "BUY", … } }/quotesCSVGüncel fiyatlar (en çok 50 sembol)
Örnek yanıt
{ "quotes": [ { "symbol": "THYAO.IS", "price": 351.2, "changePct": 0.8, "currency": "TRY", "stale": false } ] }En hızlı yol, Ayarlar > Geliştirici sayfasındaki hazır örnekler (anahtarınız otomatik doldurulur):
=IMPORTDATA("…/holdings?format=csv&key=…"; ","; "en_US")Web.Contents ile anahtar üstbilgide gider; Veri > Tümünü Yenile ile güncellenir.Ayarlar > Geliştirici sayfasından bir https:// adresi ekleyin. Olay olunca adresinize POST ile JSON gövdeli bir istek gelir:
{ "id": "evt_9c1f…", "type": "transaction.created", "createdAt": "2026-10-20T12:00:00.000Z", "data": { … } }alert.triggeredAlarm tetiklendi (fiyat, günlük % değişim, 52 haftalık zirve/dip, hacim patlaması ya da temettü duyurusu). condition: ABOVE | BELOW | DAY_UP | DAY_DOWN | HIGH_52W | LOW_52W | VOLUME_SPIKE | DIVIDEND; targetPrice koşula göre eşiktir (fiyat, yüzde ya da hacim katı); value gözlenen değer, note kısa açıklamadır.{ "alert": { "id": "…", "symbol": "THYAO.IS", "condition": "ABOVE", "targetPrice": 360, "triggerPrice": 361.2, "value": 361.2, "note": "hedef fiyatın üstüne çıktı (hedef ₺360,00)", "triggeredAt": "…" } }transaction.createdİşlem eklendi (uygulamadan, içe aktarmadan ya da API'den){ "portfolioId": "…", "transaction": { "id": "…", "symbol": "THYAO.IS", "type": "BUY", "quantity": 10, "price": 351.2, "date": "…" } }transaction.updatedİşlem güncellendi{ "portfolioId": "…", "transaction": { … } }transaction.deletedİşlem silindi{ "portfolioId": "…", "transaction": { "id": "…", "symbol": "THYAO.IS" } }Her istek HMAC-SHA256 ile imzalanır. X-Birikimli-Timestamp (unix saniye) ve X-Birikimli-Signature (v1=<hex>) başlıklarını kullanın; imzalanan metin <zaman damgası>.<ham gövde>’dir. Zaman damgası 5 dakikadan eskiyse isteği reddedin (tekrar saldırısına karşı). Ham gövdeyi ayrıştırmadan önce doğrulayın.
import { createHmac, timingSafeEqual } from "node:crypto";
// gövde: ham istek gövdesi (string), başlıklar: gelen HTTP başlıkları
export function dogrula(govde, basliklar, gizliAnahtar) {
const zaman = Number(basliklar["x-birikimli-timestamp"]);
if (!zaman || Math.abs(Date.now() / 1000 - zaman) > 300) return false; // 5 dakikadan eski: reddet
const beklenen = "v1=" + createHmac("sha256", gizliAnahtar).update(`${zaman}.${govde}`).digest("hex");
const gelen = basliklar["x-birikimli-signature"] ?? "";
return gelen.length === beklenen.length && timingSafeEqual(Buffer.from(gelen), Buffer.from(beklenen));
}id alanıyla tekilleştirin.410 Gone yanıtı uç noktayı hemen kapatır.https:// ve genel (iç ağ olmayan) adresler kabul edilir.429). Pro planda 5 etkin anahtar ve 5 webhook.stale/simulated alanları durumu bildirir. Veriler yatırım tavsiyesi değildir.| Kod | Anlamı |
|---|---|
| 400 | Geçersiz parametre ya da gövde (yanıttaki error alanı nedeni söyler) |
| 401 | Anahtar yok, geçersiz, iptal edilmiş ya da süresi dolmuş |
| 403 | Pro planı bitmiş ya da anahtarın bu işlem için yetkisi yok |
| 404 | Portföy bulunamadı |
| 429 | Dakikalık istek sınırı aşıldı |
{ "error": "API anahtarı geçersiz, iptal edilmiş ya da süresi dolmuş", "code": "INVALID_API_KEY" }