
Kingfisher API Dokümantasyonu: Geliştiriciler İçin Tam Rehber
Giriş: Kripto Verilerine Programlı Erişim
Kingfisher API, geliştiricilerin ve algoritmik trader'ların kripto piyasası verilerine programlı olarak erişmesini sağlayan güçlü bir REST API'dir. Pro plan kullanıcıları için mevcuttur.
Bu dokümantasyonda öğrenecekleriniz:
- API'ye nasıl başlanır
- Authentication ve anahtar yönetimi
- Temel endpoint'ler ve kullanım
- Python ve JavaScript örnekleri
- Rate limiting ve best practices
- Sıkça sorulan sorular
API'ye Başlama
Ön Koşullar
Gereksinimler:
1. Pro Plan Aboneliği:
- API erişimi Pro planla sınırlıdır
- Standard plan API erişimi yoktur
- Upgrade gerekli
2. API Anahtarı:
- Dashboard'dan生成
- Production ve test anahtarları
- Güvenli saklama şart
3. Temel Programlama Bilgisi:
- HTTP istekleri
- JSON parsing
- Authentication (Bearer token)
- Python veya JavaScript (tercihen)
API Anahtarı Oluşturma
Adım Adım:
1. Kingfisher Dashboard'a Giriş:
URL: https://app.thekingfisher.io/dashboard
Giriş yapın
2. Ayarlar → API Sekmesi:
- "API Keys" seçeneği
- "Create New Key" butonu
3. Anahtar Bilgileri:
- İsim: "Production" veya "Test"
- Kısıtlamalar: IP adresi (opsiyonel ama önerili)
- "Create" ile oluştur
4. Anahtarı Kaydet:
- API key'i kopyalayın (sadece bir kez gösterilir)
- Güvenli bir yere saklayın
- Asla paylaşmayın veya commit etmeyin
5. Test Etme:
- İlk istek ile test edin
- Anahtarın çalıştığını doğrulayın
Anahtar Türleri:
Production Key:
- Gerçek trading için
- Canlı veri erişimi
- Rate limits: Daha yüksek
- Production kullanımı şart
Test Key:
- Geliştirme için
- Sandbox data
- Rate limits: Daha düşük
- Ücretsiz test
Öneri:
- Her iki anahtarı da oluşturun
- Geliştirme'de test key kullanın
- Production'da production key kullanın
Authentication
Bearer Token Authentication
Tüm İstekler İçin:
HTTP Header:
Authorization: Bearer YOUR_API_KEY
Örnek:
curl -H "Authorization: Bearer sk_live_xxxxx" \\
https://api.thekingfisher.io/v1/liquidation-map
Not:
- API key'iniz "sk_live_" ile başlar
- Header her istekte gerekli
- Key'i güvende tutun
Python Örneği:
import requests
API_KEY = "sk_live_xxxxx"
BASE_URL = "https://api.thekingfisher.io/v1"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
response = requests.get(
f"{BASE_URL}/liquidation-map",
headers=headers
)
data = response.json()
print(data)
JavaScript Örneği:
const API_KEY = "sk_live_xxxxx";
const BASE_URL = "https://api.thekingfisher.io/v1";
fetch(`${BASE_URL}/liquidation-map`, {
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => console.log(data));
Temel Endpoint'ler
1. Liquidation Map
Endpoint:
GET /v1/liquidation-map
Açıklama:
Belirli bir coin için liquidation map verilerini
gerçek zamanlı olarak getirir.
Query Parametreleri:
- symbol (zorunlu): "BTC", "ETH", vb.
- exchange (opsiyonel): "binance", "all" (varsayılan)
- timeframe (opsiyonel): "1h", "4h", "1d" (varsayılan: "4h")
Response:
{
"symbol": "BTC",
"price": 50000.00,
"clusters": [
{
"price": 48000,
"long_amount": 1000000000,
"short_amount": 200000000,
"exchange": "binance"
},
...
],
"updated_at": "2026-02-04T02:30:00Z"
}
Python Örneği:
import requests
def get_liquidation_map(symbol="BTC", exchange="binance", timeframe="4h"):
url = f"{BASE_URL}/liquidation-map"
params = {
"symbol": symbol,
"exchange": exchange,
"timeframe": timeframe
}
response = requests.get(url, headers=headers, params=params)
return response.json()
# Kullanım
data = get_liquidation_map("BTC", "binance", "4h")
print(f"Bitcoin fiyatı: ${data['price']:,.2f}")
print(f"Cluster sayısı: {len(data['clusters'])}")
# En büyük long cluster'u bul
long_clusters = [c for c in data['clusters'] if c['long_amount'] > 0]
if long_clusters:
largest_long = max(long_clusters, key=lambda x: x['long_amount'])
print(f"En büyük long cluster: ${largest_long['price']:,.0f}")
print(f" Miktar: ${largest_long['long_amount']:,.0f}")
JavaScript Örneği:
async function getLiquidationMap(symbol = 'BTC', exchange = 'binance', timeframe = '4h') {
const params = new URLSearchParams({
symbol: symbol,
exchange: exchange,
timeframe: timeframe
});
const response = await fetch(`${BASE_URL}/liquidation-map?${params}`, {
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
}
});
return await response.json();
}
// Kullanım
getLiquidationMap('BTC', 'binance', '4h')
.then(data => {
console.log(`Bitcoin fiyatı: $${data.price.toLocaleString()}`);
console.log(`Cluster sayısı: ${data.clusters.length}`);
// En büyük long cluster'u bul
const longClusters = data.clusters.filter(c => c.long_amount > 0);
if (longClusters.length > 0) {
const largestLong = longClusters.reduce((a, b) =>
a.long_amount > b.long_amount ? a : b
);
console.log(`En büyük long cluster: $${largestLong.price.toLocaleString()}`);
console.log(` Miktar: $${largestLong.long_amount.toLocaleString()}`);
}
});
2. GEX+ (Gamma Exposure)
Endpoint:
GET /v1/gex
Açıklama:
Belirli bir coin için GEX+ (Gamma Exposure)
verilerini getirir.
Query Parametreleri:
- symbol (zorunlu): "BTC", "ETH", vb.
- exchange (opsiyonel): "all" (varsayılan)
Response:
{
"symbol": "BTC",
"gex_value": 800000000,
"gex_percentile": 75,
"dealer_positioning": "long_gamma",
"updated_at": "2026-02-04T02:30:00Z"
}
Python Örneği:
def get_gex(symbol="BTC"):
url = f"{BASE_URL}/gex"
params = {"symbol": symbol}
response = requests.get(url, headers=headers, params=params)
return response.json()
# Kullanım
data = get_gex("BTC")
print(f"GEX+ Değeri: ${data['gex_value']:,.0f}")
print(f"Percentile: {data['gex_percentile']}th")
# Yorumlama
if data['gex_value'] > 1000000000:
print("→ Çok yüksek GEX+ (stabilizing)")
elif data['gex_value'] > 0:
print("→ Pozitif GEX+ (stabilizing)")
elif data['gex_value'] < -1000000000:
print("→ Çok düşük GEX+ (volatilite artırıcı)")
else:
print("→ Negatif GEX+ (volatilite artırıcı)")
3. Open Interest
Endpoint:
GET /v1/open-interest
Açıklama:
Belirli bir coin için Open Interest
verilerini getirir.
Query Parametreleri:
- symbol (zorunlu): "BTC", "ETH", vb.
- exchange (opsiyonel): "all" (varsayılan)
- timeframe (opsiyonel): "1d" (varsayılan)
Response:
{
"symbol": "BTC",
"oi_value": 12000000000,
"oi_change_24h": 0.15,
"oi_change_7d": 0.25,
"updated_at": "2026-02-04T02:30:00Z"
}
Python Örneği:
def get_open_interest(symbol="BTC"):
url = f"{BASE_URL}/open-interest"
params = {"symbol": symbol}
response = requests.get(url, headers=headers, params=params)
return response.json()
# Kullanım
data = get_open_interest("BTC")
print(f"Open Interest: ${data['oi_value']/1e9:.2f}B")
print(f"24 Saat Değişim: %{data['oi_change_24h']*100:.1f}")
print(f"7 Gün Değişim: %{data['oi_change_7d']*100:.1f}")
# Trend analizi
if data['oi_change_24h'] > 0.1:
print("→ Güçlü artış (para girişi)")
elif data['oi_change_24h'] > 0:
print("→ Hafif artış")
else:
print("→ Azalış (para çıkışı)")
4. Funding Rate
Endpoint:
GET /v1/funding-rate
Açıklama:
Belirli bir coin için funding rate
verilerini getirir.
Query Parametreleri:
- symbol (zorunlu): "BTC", "ETH", vb.
- exchange (opsiyonel): "all" (varsayılan)
Response:
{
"symbol": "BTC",
"current_rate": 0.0001,
"predicted_rate": 0.00012,
"avg_24h": 0.00008,
"next_funding_time": "2026-02-04T08:00:00Z"
}
Python Örneği:
def get_funding_rate(symbol="BTC"):
url = f"{BASE_URL}/funding-rate"
params = {"symbol": symbol}
response = requests.get(url, headers=headers, params=params)
return response.json()
# Kullanım
data = get_funding_rate("BTC")
print(f"Mevcut Funding: %{data['current_rate']*100:.3f}")
print(f"Tahmini Funding: %{data['predicted_rate']*100:.3f}")
print(f"24 Saat Ortalama: %{data['avg_24h']*100:.3f}")
# Extreme kontrolü
if data['current_rate'] > 0.0005:
print("⚠️ EXTREME POZİTİF (long'lar öder)")
elif data['current_rate'] < -0.0005:
print("⚠️ EXTREME NEGATİF (short'lar öder)")
elif data['current_rate'] > 0:
print("→ Pozitif (normal)")
else:
print("→ Negatif (normal)")
5. Long/Short Ratio
Endpoint:
GET /v1/long-short-ratio
Açıklama:
Belirli bir coin için long/short ratio
verilerini getirir.
Query Parametreleri:
- symbol (zorunlu): "BTC", "ETH", vb.
- exchange (opsiyonel): "all" (varsayılan)
Response:
{
"symbol": "BTC",
"ls_ratio": 1.5,
"long_percent": 60.0,
"short_percent": 40.0,
"updated_at": "2026-02-04T02:30:00Z"
}
Python Örneği:
def get_long_short_ratio(symbol="BTC"):
url = f"{BASE_URL}/long-short-ratio"
params = {"symbol": symbol}
response = requests.get(url, headers=headers, params=params)
return response.json()
# Kullanım
data = get_long_short_ratio("BTC")
print(f"L/S Ratio: {data['ls_ratio']:.2f}")
print(f"Long: %{data['long_percent']:.1f}")
print(f"Short: %{data['short_percent']:.1f}")
# Extreme kontrolü
if data['ls_ratio'] > 3.0:
print("⚠️ EXTREME LONG (tepe sinyali)")
elif data['ls_ratio'] < 0.33:
print("⚠️ EXTREME SHORT (dip sinyali)")
elif data['ls_ratio'] > 1.0:
print("→ Long dominance")
else:
print("→ Short dominance")
Rate Limiting
Limits ve Best Practices
Rate Limits:
Pro Plan Limits:
- 100 istek / dakika
- 2,000 istek / saat
- 40,000 istek / gün
Test Plan Limits:
- 20 istek / dakika
- 400 istek / saat
- 8,000 istek / gün
Headers:
X-RateLimit-Remaining: Kalan istek sayısı
X-RateLimit-Reset: Reset zamanı (Unix timestamp)
Best Practices:
1. Rate Limit Takibi:
- Response headers'ı kontrol edin
- Kalan istekleri izleyin
- Reset zamanını bilin
2. Caching:
- Sık değişmeyen veriyi cache'leyin
- 1-5 dakika cache yeterli
- Rate limit kullanımını azaltır
3. Retry Logic:
- 429 (Too Many Requests) alırsanız bekleyin
- Exponential backoff kullanın
- Maksimum 3 deneme
4. Batch Requests:
- Birden fazla endpoint'i çağırmak yerine
- Batch endpoint'i kullanın (varsa)
- Daha verimli
Python Rate Limiting Örneği:
import time
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def create_session():
session = requests.Session()
# Retry strategy
retry = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504]
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('https://', adapter)
return session
def make_request(session, url, params=None, max_retries=3):
for attempt in range(max_retries):
response = session.get(url, headers=headers, params=params)
# Rate limit kontrolü
remaining = int(response.headers.get('X-RateLimit-Remaining', 0))
reset = int(response.headers.get('X-RateLimit-Reset', 0))
if remaining < 5:
# Rate limit yaklaşıyor, bekle
wait_time = max(1, reset - int(time.time()))
print(f"Rate limit yaklaşıyor, {wait_time} saniye bekleniyor...")
time.sleep(wait_time)
if response.status_code == 429:
# Rate limit aşıldı, bekle ve retry
wait_time = 2 ** attempt # Exponential backoff
print(f"Rate limit aşıldı, {wait_time} saniye bekleniyor...")
time.sleep(wait_time)
continue
return response
return None
# Kullanım
session = create_session()
data = make_request(session, f"{BASE_URL}/liquidation-map", params={"symbol": "BTC"})
Kompleks Örnekler
Multi-Coin Analiz Script
Python Örneği:
import requests
import pandas as pd
from datetime import datetime
class KingfisherAnalyzer:
def __init__(self, api_key):
self.api_key = api_key
self.base_url = "https://api.thekingfisher.io/v1"
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def get_liquidation_map(self, symbol):
params = {"symbol": symbol}
response = requests.get(
f"{self.base_url}/liquidation-map",
headers=self.headers,
params=params
)
return response.json()
def get_gex(self, symbol):
params = {"symbol": symbol}
response = requests.get(
f"{self.base_url}/gex",
headers=self.headers,
params=params
)
return response.json()
def get_open_interest(self, symbol):
params = {"symbol": symbol}
response = requests.get(
f"{self.base_url}/open-interest",
headers=self.headers,
params=params
)
return response.json()
def get_funding_rate(self, symbol):
params = {"symbol": symbol}
response = requests.get(
f"{self.base_url}/funding-rate",
headers=self.headers,
params=params
)
return response.json()
def get_long_short_ratio(self, symbol):
params = {"symbol": symbol}
response = requests.get(
f"{self.base_url}/long-short-ratio",
headers=self.headers,
params=params
)
return response.json()
def analyze_coin(self, symbol):
"""Tüm verileri topla ve analiz et"""
print(f"\n{'='*60}")
print(f"{symbol} Analizi")
print(f"{'='*60}")
# Tüm verileri al
lm = self.get_liquidation_map(symbol)
gex = self.get_gex(symbol)
oi = self.get_open_interest(symbol)
fr = self.get_funding_rate(symbol)
ls = self.get_long_short_ratio(symbol)
# Fiyat
print(f"\nFiyat: ${lm['price']:,.2f}")
# Liquidation map
long_clusters = [c for c in lm['clusters'] if c['long_amount'] > 0]
if long_clusters:
largest_long = max(long_clusters, key=lambda x: x['long_amount'])
print(f"\nEn Büyük Long Cluster:")
print(f" Seviye: ${largest_long['price']:,.0f}")
print(f" Miktar: ${largest_long['long_amount']/1e9:.2f}B")
# GEX+
print(f"\nGEX+: ${gex['gex_value']/1e6:.0f}M")
print(f" Percentile: {gex['gex_percentile']}th")
print(f" Dealer: {gex['dealer_positioning']}")
# Open Interest
print(f"\nOpen Interest: ${oi['oi_value']/1e9:.2f}B")
print(f" 24S Değişim: %{oi['oi_change_24h']*100:.1f}")
# Funding Rate
print(f"\nFunding Rate: %{fr['current_rate']*100:.3f}")
# Long/Short Ratio
print(f"\nL/S Ratio: {ls['ls_ratio']:.2f}")
print(f" Long: %{ls['long_percent']:.1f}")
print(f" Short: %{ls['short_percent']:.1f}")
# Sinyal analizi
signals = self.generate_signals(lm, gex, oi, fr, ls)
print(f"\nSinyaller:")
for signal in signals:
print(f" {signal}")
def generate_signals(self, lm, gex, oi, fr, ls):
"""Trading sinyalleri oluştur"""
signals = []
# Liquidation map sinyali
long_clusters = [c for c in lm['clusters'] if c['long_amount'] > 500_000_000]
if long_clusters:
largest_long = max(long_clusters, key=lambda x: x['long_amount'])
if lm['price'] - largest_long['price'] < lm['price'] * 0.05:
signals.append(f"💰 Yakın long cluster @ ${largest_long['price']:,.0f}")
# GEX+ sinyali
if gex['gex_value'] > 1_000_000_000:
signals.append("✅ Çok yüksek GEX+ (stabilizing)")
elif gex['gex_value'] < -1_000_000_000:
signals.append("⚠️ Çok düşük GEX+ (volatilite artırıcı)")
# Open Interest sinyali
if oi['oi_change_24h'] > 0.2:
signals.append("📈 Güçlü OI artışı (trend güçleniyor)")
elif oi['oi_change_24h'] < -0.1:
signals.append("📉 OI azalışı (trend zayıflıyor)")
# Funding rate sinyali
if fr['current_rate'] > 0.0005:
signals.append("🔥 Extreme pozitif funding (tepe riski)")
elif fr['current_rate'] < -0.0005:
signals.append("❄️ Extreme negatif funding (dip fırsatı)")
# Long/Short ratio sinyali
if ls['ls_ratio'] > 3.0:
signals.append("⚠️ Extreme long (tepe sinyali)")
elif ls['ls_ratio'] < 0.33:
signals.append("💚 Extreme short (dip sinyalı)")
return signals
# Kullanım
analyzer = KingfisherAnalyzer("sk_live_xxxxx")
# Birden fazla coin analizi
coins = ["BTC", "ETH", "SOL"]
for coin in coins:
analyzer.analyze_coin(coin)
time.sleep(1) # Rate limit için bekle
Hata Yönetimi
Hata Türleri ve Çözümleri
Yaygın Hatalar:
1. 401 Unauthorized:
- API key yanlış veya eksik
- Çözüm: API key'i kontrol edin
2. 403 Forbidden:
- Yetersiz izinler
- Çözüm: Pro plan'a upgrade edin
3. 404 Not Found:
- Endpoint yanlış
- Çözüm: URL'i kontrol edin
4. 429 Too Many Requests:
- Rate limit aşıldı
- Çözüm: Bekleyin ve retry edin
5. 500 Internal Server Error:
- Sunucu hatası
- Çözüm: Retry edin
Python Hata Yönetimi:
import requests
from requests.exceptions import RequestException
def safe_api_call(url, params=None, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.get(url, headers=headers, params=params)
# Başarılı
if response.status_code == 200:
return response.json()
# Hata durumları
elif response.status_code == 401:
raise Exception("API key yanlış veya eksik")
elif response.status_code == 403:
raise Exception("Pro plan gerekli")
elif response.status_code == 404:
raise Exception("Endpoint bulunamadı")
elif response.status_code == 429:
# Rate limit, bekle ve retry
wait_time = 2 ** attempt
print(f"Rate limit, {wait_time}s bekleniyor...")
time.sleep(wait_time)
continue
elif response.status_code >= 500:
# Sunucu hatası, retry
if attempt < max_retries - 1:
time.sleep(1)
continue
else:
raise Exception(f"Sunucu hatası: {response.status_code}")
except RequestException as e:
if attempt < max_retries - 1:
time.sleep(1)
continue
else:
raise Exception(f"İstek hatası: {e}")
return None
# Kullanım
try:
data = safe_api_call(f"{BASE_URL}/liquidation-map", params={"symbol": "BTC"})
print(data)
except Exception as e:
print(f"Hata: {e}")
Sıkça Sorulan Sorular (FAQ)
S1: API'ye nasıl erişirim?
Cevap:
Pro plan aboneliği gerekli.
Adımlar:
1. Pro plan'a upgrade edin ($109/ay)
2. Dashboard'dan API key oluşturun
3. Documentation'ı okuyun
4. Test edin
Test Key:
- Geliştirme için test key kullanın
- Production'da production key kullanın
S2: Rate limit nedir?
Cevap:
Pro plan: 100 istek/dakika
Test plan: 20 istek/dakika
Aşıldığında:
- 429 hatası alırsınız
- Beklemeli ve retry etmelisiniz
- Response headers'da bilgi var
Best Practice:
- Caching kullanın
- Batch requests yapın
- Rate limit'i izleyin
S3: Webhook desteği var mı?
Cevap:
Şu anda yok, ama planlanıyor.
Alternatif:
- Polling (periyodik istek)
- WebSocket planlanıyor
- Product roadmap'da
Şu anda:
- Sık polling (her 1-5 dakika)
- Rate limit'e dikkat
- Caching kullanın
Sonuç: Kripto Verilerine Erişin
Önemli Noktalar
Kingfisher API Özeti:
Öğrendikleriniz:
1. API'ye başlama
2. Authentication
3. Temel endpoint'ler
4. Python ve JavaScript örnekleri
5. Rate limiting
6. Hata yönetimi
Kingfisher API Avantajları:
- %100 doğru veri
- Gerçek zamanlı güncelleme
- Tüm borsalar entegre
- Detaylı dokümantasyon
- Python/JavaScript örnekleri
Başarı İçin Kurallar:
1. Güvenlik:
- API key'i güvende tutun
- Production ve test key ayrın
- Git'e commit etmeyin
2. Rate Limit:
- Limits'i izleyin
- Caching kullanın
- Retry logic implement edin
3. Hata Yönetimi:
- Tüm hataları handle edin
- Graceful degradation
- Loglama
4. Best Practices:
- Sık değişmeyen veriyi cache'leyin
- Batch requests yapın
- Asynchronous çağrılar kullanın
Kaynaklar:
Geliştirmeye Başlayın →






