MeowQuant bağımsız bir üçüncü taraf bilgi sitesidir, OKX'in resmî sitesi değildir. Bazı sayfalardaki açıkça belirtilen tanıtım ilişkilerinden hizmet ücreti alabiliriz. Tam açıklama →

OKX · API uygulamalı

OKX API yaygın hataları ve sorun giderme listesi: bu tabloya bakıp düzelt

Algo betiği yazanların onda dokuzu stratejide değil, kırmızı bir hata satırında takılır: betik çalışır, terminale anlaşılmaz bir code ve İngilizce yığını düşer, insan donar kalır. İyi haber şu ki OKX API'nin hataları yalnızca birkaç sık türden ibaret; her birinin neye benzediğini, hangi nedene karşılık geldiğini bilince sorun giderme çok daha hızlı olur.

Bu yazıda biz (MeowQuant editör ekibi) kendi başımıza gelen ve toplulukta defalarca gördüğümüz hataları bir listede topladık; çekirdeği bir hata kodu eşleştirme tablosu — bir sorun çıktığında önce tabloda hata kodu ya da anahtar kelimeyle yerini bul, sonra altındaki madde madde sorun gidermeye bak. Okuyunca çoğu hatayı kırmızı yazıya bakakalmadan birkaç dakikada kendin çözebilmelisin.

Önce hatayı okumayı öğren: code + msg

Hata gidermenin ilk adımı, hatanın kendisini anlamaktır. OKX arayüzü hata verince üç bilgi döndürür:

  • HTTP durum kodu: en kaba katman, örneğin 401 (kimlik doğrulama sorunu), 429 (çok fazla istek), 400 (isteğin kendisinde sorun).
  • code: OKX'in kendi sayısal hata kodu, sorun türünü en kesin gösterir. Sorun gidermenin ana dayanağı budur.
  • msg: bir metin açıklaması, yönü doğrulamana yardım eder, bazen doğrudan hangi alanın hatalı olduğunu söyler.

ccxt kullanıyorsan bu ham hataları daha okunaklı istisna türlerine sarar; örneğin kimlik doğrulama sorununda AuthenticationError, istek sınırında RateLimitExceeded, bakiye yetersizliğinde InsufficientFunds fırlatır. İstisna mesajında da genelde OKX'in ham code ve msg'si bulunur. İyi bir alışkanlık, bunları try/except ile net yazdırmaktır:

import ccxt

okx = ccxt.okx({
    'apiKey':   'senin_apiKey',
    'secret':   'senin_secret',
    'password': 'senin_Passphrase',
    'enableRateLimit': True,
})

try:
    balance = okx.fetch_balance()
    print('USDT kullanılabilir:', balance['USDT']['free'])
except ccxt.InvalidNonce as e:
    print('Zaman damgası süresi doldu (50102), saati düzeltip tekrar dene:', e)
except ccxt.AuthenticationError as e:
    print('Kimlik doğrulama başarısız, neye bakacağına karar vermeden önce hatadaki code degerine bak:', e)
except ccxt.RateLimitExceeded as e:
    print('İstek sınırına takıldı, istekleri yavaşlat:', e)
except ccxt.BaseError as e:
    print('Başka hata, ham code/msg degerine bak:', e)

İstisnadaki o code ve msg'yi olduğu gibi not al, aşağıdaki tabloyla karşılaştır, hangi tür soruna düştüğünü çoğunlukla bulabilirsin.

Sık hatalar eşleştirme tablosu

Aşağıdaki tablo yeni başlayanların en sık çarptığı birkaç hatayı kapsar. Tablodaki hata kodlarının anlamları 2026-09'da, OKX API v5 dokümanının Error Code bölümü esas alınarak doğrulanmıştır (OKX zaman zaman kod değerlerini değiştirebilir, uymayanla karşılaşırsan msg metnini ve resmî dokümanı esas al); önemli olan «neden → nasıl düzeltilir» eşleşmesini doğru kurmaktır. Kimlik doğrulama grubunda özellikle code'a göre dallanmak gerekir: ikisi de «bağlanamıyorum» gibi görünse de 50113 ile 50105'te bakılacak yer tamamen farklıdır.

Hata (code / anahtar kelime)Büyük olasılıkla nedenNasıl düzeltilir
50011
Too Many Requests / istek sınırı
İstekler çok sık, arayüz istek sınırı koruması devreye girdi enableRateLimit'i aç; yine çarparsa üstel geri çekilmeli yeniden deneme ekle, gecikmesiz while döngüsü kullanma
50113
Invalid signature
İmzanın kendisi doğrulamadan geçmedi; sorun imza adımındadır, illa yanlış yazılmış bir bilgi değildir İmza metninin nasıl birleştirildiğini (istek yöntemi, istek yolu, istek gövdesi), HMAC anahtarının gerçekten secret olup olmadığını, HMAC-SHA256 sonrası Base64 alınıp alınmadığını kontrol et; ccxt'te imzayı kütüphane attığı için önce secret'ın yanlış kopyalanmış olmasından şüphelen
50111
Invalid OK-ACCESS-KEY
apiKey yanlış kopyalanmış, silinmiş ya da yanlış ortamda kullanılmış (gerçek hesap Key'i demo hesap Key'i sanılmış) apiKey'i panelden yeniden kopyala; bu Key'in hâlâ var ve silinmemiş olduğunu doğrula; sandbox anahtarının ortamla uyumlu olduğunu doğrula
50105
OK-ACCESS-PASSPHRASE incorrect
(50104 = bu alan boş)
Parola tutmuyor: ccxt'in password alanına Key oluştururken belirlenen Passphrase yerine giriş şifresi yazılmış password'ı o Key'i oluştururken belirlediğin Passphrase olarak değiştir; hatırlamıyorsan Key'i silip yeniden oluştur
Yetersiz bakiye
Insufficient balance
Emir tutarı hesabın kullanılabilir bakiyesini aşıyor ya da para başka hesapta (örneğin fon hesabı vs işlem hesabı) Emir miktarını küçült; paranın işlem için kullanılan hesapta olduğunu doğrula; demo hesapta sanal sermayeyi sıfırlayabilirsin
50102 Timestamp request expired
50112 Invalid OK-ACCESS-TIMESTAMP
İstekteki zaman damgası sunucu saatiyle tutmuyor: resmî dokümana göre fark 30 saniyeyi aşarsa doğrudan reddedilir (50112 ise bu alanın biçiminin bozuk olmasıdır) NTP otomatik saat ayarını açıp sistem saatini doğru senkronize et; bulut sunucular genelde varsayılan açıktır
50120
API key'in bu işlev için yetkisi yok
Bu Key'de gerekli yetki yok (sık: sadece okuma işaretli, işlem işaretsiz); diğer kimlik doğrulama hataları gibi 401 değil, HTTP 200 ile döner — ancak gövdedeki code okunarak görülür API yönetimine dönüp bu Key'e «İşlem» yetkisini ekle, yeniden oluşturmaya gerek yok
50110
Your IP is not included in your API key's IP whitelist
Key'e IP beyaz listesi kurulmuş ama mevcut çıkış IP listede yok (ağ değişti/proxy açıldı/internet IP değişti) Önce kendi mevcut çıkış IP'ni öğren, sonra onu bu Key'in beyaz listesine ekle (her Key'e en fazla 20 IP, ağ bloğu da desteklenir); çıkış IP'si oynaksa ne yapılacağı aşağıda anlatılıyor, «beyaz listeyi kaldır»ı rutin çözüm yapma
İşlem çifti yok
instrument does not exist
symbol biçimi yanlış ya da spot emrinde vadeli biçim kullanılmış Spot'u BTC/USDT yaz (büyük harf, eğik çizgili); önce load_markets() ile mevcut çiftlere bak
Miktar/hassasiyet uymuyor
size too small
Emir miktarı bu çiftin en düşük emir miktarından küçük ya da hassasiyet basamağı yanlış load_markets() ile bu çiftin limits ve precision değerlerine bakıp istenene göre yuvarla

Madde madde nasıl düzeltilir

Tablo yön verir, bu bölüm ayrıntı verir. Çarptığın maddeyi seçip aşağı bak.

Kimlik doğrulama türü (50102 / 50105 / 50110 / 50111 / 50112 / 50113) ve yetki türü (50120)

Kimlik doğrulama hataları HTTP katmanında istisnasız 401'dir; ccxt'te çoğu AuthenticationError fırlatır (50110'un fırlattığı PermissionDenied da onun alt sınıfıdır). İstisna 50102, yani zaman damgası süresinin dolması: ccxt'in 2026-09 tarihli ana dal kaynak koduna göre InvalidNonce'a eşlenir, bu da NetworkError kolundadır; yalnızca except AuthenticationError yazarsan onu yakalayamazsın, ayrı bir dal gerekir. O yüzden «en sık nedenler»i tek tek denemeye kalkma — önce code'u çıkar, sonra ona karşılık gelen satırı izle. 50120 «yetki yetersiz» ayrı tutulmalı: o, 401 yığınının içinde değildir. Resmî hata kodu tablosuna göre HTTP 200 ile döner ve gövdedeki code ile ayırt edilir; yani istek protokol düzeyinde «başarılı»dır, sadece durum koduna bakarak bir şeyin ters gittiğini hiç göremezsin.

  • 50113 Invalid signature: imza adımına bak. İmza metninin birleştirilmesi (istek yöntemi, istek yolu, istek gövdesi), HMAC için kullanılan anahtarın secret olup olmadığı, HMAC-SHA256 sonrası Base64 alınıp alınmadığı. ccxt kullanıyorsan imzayı kütüphane atar; bu durumda önce secret'ın yanlış kopyalandığından şüphelen.
  • 50105 Passphrase yanlış (50104 ise hiç doldurulmamış): yalnızca parolaya bak. ccxt'teki password alanına yazılması gereken, Key'i oluştururken belirlediğin o Passphrase dizisidir; giriş şifresi değil, secret de değil. Hatırlamıyorsan tek yol Key'i silip yeniden oluşturmaktır.
  • 50102 / 50112 zaman damgası sorunu: yalnızca saate bak. Resmî dokümana göre istek zaman damgası ile sunucu saati arasındaki fark 30 saniyeyi aşarsa istek reddedilir. NTP otomatik saat ayarını aç; uzun süre çalışan makinelerde gerçekten senkronize olduğunu ara ara doğrula. ccxt'te 50102 InvalidNonce fırlatır: o dalda saati düzeltip yeniden dene, en sona da bir BaseError yakalayıcısı bırak.
  • 50111 Invalid OK-ACCESS-KEY: apiKey'in kendisine bak — yapıştırırken baş-sonda boşluk kalmış, karakter eksilmiş, Key silinmiş ya da gerçek hesap Key'i demoya (veya tersi) bağlanmış olabilir.
  • 50110 IP beyaz listede değil: kimlik bilgilerine değil, ağ çıkışına bak. Aşağıdaki «IP beyaz listesi» bölümüne bak.
  • 50120 yetki yetersiz (HTTP 200): bilgilerin hepsi doğru, yalnızca bu Key'de ilgili yetki işaretli değil. Hiçbir zaman 401 biçiminde görünmez; onu ancak gövdedeki code'u okuyarak fark edersin — bu yüzden kontrol mantığını sadece if status == 401 diye yazma. Aşağıdaki «Yetki yetersiz»e bak.

Bu arada: OKX'in msg metni bazen sorunun hangi header'da olduğunu doğrudan söyler; onu code ile birlikte olduğu gibi not almak, izlenime dayanarak tahmin etmekten çok daha hızlıdır.

Yetki yetersiz

Tipik belirti «bakiye sorgulanabiliyor, emir verilemiyor»dur. Bakiye sorgulamak okuma yetkisi, emir vermek işlem yetkisidir; ikisi ayrı verilir. OKX panelindeki API yönetimine dönüp bu Key'i bul, «İşlem»i ekle yeter, yeniden oluşturmaya gerek yok. Eğer çekim de işaretlediysen, bırakma — algo çalıştıran Key'de çekim yetkisi asla açılmaz. Ayrıca «işlem yetkisi»ni fazla dar düşünme: OKX belgelerindeki tanıma göre emir verip iptal etmenin yanında fon transferini ve bir kısım hesap ayarını da kapsar; yani hesaplar arası transfer yapabilmek için çekimi işaretlemeye gerek yoktur.

IP beyaz listesi (50110)

Bu hata «şu anki çıkış IP'n bu Key'in listesinde değil» demektir; dolayısıyla araştırma kimlik bilgilerinden değil, ağ çıkışından başlar:

  • Önce mevcut çıkış IP'ni öğren ve panelde bu Key için doldurduğun listeyle tek tek karşılaştır. Dikkat, söz konusu olan çıkış IP'sidir: proxy açıksan, şirket ağ geçidinden geçiyorsan ya da evdeki internet yeniden bağlandıysa çıkış sandığın IP olmayabilir.
  • Çıkış IP'si oynaksa çözüm yönü, kilidi sökmek değil çıkışı sabitlemektir: stratejiyi sabit IP'li bir makineye taşı ya da çıkış gerçekten değiştiğinde beyaz listeyi düzenli bir ritimle güncelle. OKX tarafında her Key'e en fazla 20 IP bağlanabilir, IPv4/IPv6 ve ağ bloğu desteklenir; pay bırakmak zor değil.
  • Hata ayıklama aşamasında salt okunur Key ya da demo Key kullan, işlem yetkisi olan asıl Key'le defalarca deneme yapma.
  • «Beyaz listeyi kaldırmak»ı rutin bir sorun giderme hamlesi yapma. Resmî tutum, IP bağlamayı zorunlu değil şiddetle tavsiye edilen bir adım saymaktır; ama akılda tutulması gereken bir kural var: IP bağlanmamış, üstelik trade ya da withdraw yetkisi taşıyan bir Key 14 gün hareketsiz kalırsa süresi dolar — yani IP bağlanmamış bir Key hem daha riskli, hem bir gün kendiliğinden geçersizleşebilir. Demo Key'ler bu süre dolma kuralına tabi değildir; hata ayıklamayı onunla yapmanın bir nedeni de budur.

Yetersiz bakiye

Lafzi anlamda para yetmemesi dışında gizli bir neden daha var: OKX'in farklı hesapları (fon hesabı, işlem hesabı vb.) vardır, paran emir verilen hesapta olmayabilir. Paranın işlem hesabına aktarıldığını doğrula. Demo hesapta sanal sermaye biterse demo arayüzünden sıfırlamak yeter — bu da önce demo hesapta alıştırma yapmanın faydasıdır, deneme yanılma gerçek para harcamaz.

symbol / hassasiyet türü

ccxt'te spot işlem çiftleri tek tip BÜYÜK/BÜYÜK ve düz eğik çizgilidir, örneğin BTC/USDT. BTCUSDT, küçük harf ya da vadeli biçim hata verir. Miktar çok küçük ya da hassasiyet yanlışsa load_markets() ile bu çiftin en düşük emir miktarına ve hassasiyetine bakıp istenene göre doldur. Bu konunun eksiksiz emir örneği API'ye giriş yazımızda var.

İstek sınırı ve geri çekilmeli yeniden deneme

İstek sınırı (50011 / Too Many Requests), betikçilerin en sık çarptığı ve en çok önceden önlemesi gereken hata türüdür. Yanlış bir şey yapmandan değil, isteklerin çok sık olması üzerine borsanın korumasının devreye girmesinden kaynaklanır. İki katmanda ele al:

Birinci katman: ccxt'in kendi hız sınırlamasını aç. Başlatırken 'enableRateLimit': True ekle, ccxt istekler arasına makul aralık koyar; çoğu durumda bu adım yeter:

okx = ccxt.okx({
    'apiKey':   'senin_apiKey',
    'secret':   'senin_secret',
    'password': 'senin_Passphrase',
    'enableRateLimit': True,   # Otomatik hız sınırlama, önce aç
})

İkinci katman: üstel geri çekilmeli yeniden deneme ekle. Stratejin bazı anlarda gerçekten çok sık istek yapıyorsa (örneğin aynı anda çok çiftin verisini çekiyorsa), tek başına otomatik hız sınırlama yine ara sıra çarpabilir. Bu durumda kritik isteğe bir yeniden deneme katmanı sar: bir çarpışta 1 saniye bekleyip tekrar dene, sonra 2, 4 saniye, kademe kademe uzat, yeterince çarpınca vazgeçip hata fırlat.

import ccxt, time

def with_retry(fn, max_tries=5):
    delay = 1
    for i in range(max_tries):
        try:
            return fn()
        except ccxt.RateLimitExceeded:
            print(f'İstek sınırı, {i+1}. deneme, {delay}s bekleyip tekrar')
            time.sleep(delay)
            delay *= 2          # Üstel geri çekilme: 1 → 2 → 4 → 8 ...
    raise RuntimeError('Birçok denemeye rağmen istek sınırı, vazgeçildi')

# Kullanım: istek sınırına takılacak çağrıyı buna ver
ticker = with_retry(lambda: okx.fetch_ticker('BTC/USDT'))
print(ticker['last'])

Bir kötü örnek: while True: içine hemen API çağrısı koyup arasına hiç gecikme koymama. Böyle bir döngü bir saniyede onlarca yüzlerce istek atar, anında istek sınırına çarpar, kötü durumda tüm Key kısa süre kısıtlanır. Her yüksek frekanslı döngüde mutlaka aralık bırak.

Sık düşülen bir hız sınırı tuzağı

📋 Sık karşılaşılan tuzak
Çok tipik bir senaryo: OKX demo hesabında çok çiftli bir tarama betiği ayıklarken, baştan döngü içinde on küsur çift için art arda fetch_ticker çağırırsın, araya hiç gecikme koymazsın, enableRateLimit'i açmayı da unutursun. Böyle yazılınca ucun hız sınırı koruması sürekli tetiklenir: terminal RateLimitExceeded (50011'e karşılık) basmaya başlar ve sonraki isteklerin büyük bölümü başarısız olur. Çözüm iki adımdır: önce başlatmaya 'enableRateLimit': True ekle, sonra her çiftin isteğini yukarıdaki with_retry geri çekilme fonksiyonuna sar. Değiştirip yeniden çalıştırdığında istekler arasında aralık oluşur; sınıra takılan istek de doğrudan boşa gitmek yerine geri çekilip yeniden denenir. Ders çok net: döngüde API dövüyorsan, hız sınırı ve geri çekilme standart donanımdır, isteğe bağlı değil.
Risk uyarısı: Hatayı çözmek yalnızca betiğin çalıştığı anlamına gelir, kazandırdığı anlamına gelmez. Kırmızı bir hata satırından daha korkutucu olan, hiç hata vermeden sessizce yanlış emir girmeyi sürdüren bir betiktir. Kripto varlık fiyatları şiddetle dalgalanır, anapara büyük ölçüde eriyebilir, hatta sıfırlanabilir; API otomasyonu hataların uygulama hızını büyütür, vadeli işlem ve kaldıraçlı işlem %100 anapara kaybına yol açabilir. Bu yazı bir teknik sorun giderme derlemesidir, hiçbir yatırım tavsiyesi oluşturmaz. Yalnızca tamamını kaybetmeyi göze alabileceğin parayı kullan, yerel yasalara da uy.

Sık sorulan sorular

OKX API hatası nasıl okunur?

OKX'in arayüzü hata verince bir code (sayısal hata kodu) ve bir msg (metin açıklaması) ile HTTP durum kodu döndürür. Önce code'a bak, sorun türünü en kesin gösterir; msg yönü doğrulamana yardım eder. ccxt'te hata genellikle ilgili istisna türüne sarılır (örneğin AuthenticationError, RateLimitExceeded, InsufficientFunds), istisna mesajında da çoğunlukla OKX'in ham code ve msg'si bulunur. Bu metni olduğu gibi aratmak çoğu zaman sorunu yerini bulmaya yeter.

Neden sürekli kimlik doğrulama hatası / Invalid sign alıyorum?

Kimlik doğrulama hatalarını tek bir hata sanma. HTTP katmanında hepsi 401'dir, ccxt'te çoğu AuthenticationError fırlatır — istisna 50102 (zaman damgası süresi dolmuş): o, NetworkError ailesinden InvalidNonce fırlatır ve ayrı bir dal ister; ama OKX'in döndürdüğü code farklı şeyleri gösterir: 50113 imzanın geçmediğini söyler, imza metninin nasıl birleştirildiğine ve secret'a bakılır; 50105 Passphrase'in yanlış olduğunu söyler, ccxt'in password alanına Key'i oluştururken belirlediğin parola yazılmalıdır; 50102 ve 50112 zaman damgası sorunudur, istek zamanı sunucu saatinden 30 saniyeden fazla saparsa reddedilir, NTP saat ayarını aç; 50111 apiKey'in kendisinin geçersiz olduğunu ya da yanlış ortamda kullanıldığını gösterir; 50110 mevcut çıkış IP'nin beyaz listede olmadığını söyler. 50120 «yetki yetersiz» ise ayrı tutulmalı: 401 yığınının içinde değildir — resmî hata kodu tablosuna göre HTTP 200 ile döner ve gövdedeki code ile ayırt edilir; bilgilerin hepsi doğrudur, yalnızca bu Key'de ilgili yetki işaretli değildir. Önce code'u çıkar, sonra neye bakacağına karar ver; deneyime göre tek tek denemekten hızlıdır.

İstek sınırına (50011 / Too Many Requests) takıldım, ne yapmalıyım?

İstek sınırı, isteklerin çok sık olması üzerine devreye giren bir korumadır. En kolay çözüm, ccxt'i başlatırken enableRateLimit'i açmaktır; istekler arasına otomatik aralık koyar. Yine çarpıyorsan koda üstel geri çekilmeli yeniden deneme ekle — bir çarpışta 1 saniye, sonra 2, 4 saniye bekle, kademe kademe uzat. Hiçbir gecikme koymadan while True ile API'yi dövme.

Bakiye sorgulayabiliyorum ama emir verince yetki yetersiz diyor, neden?

Bakiye sorgulamak okuma yetkisi, emir vermek işlem yetkisidir; ikisi Key oluşturulurken ayrı verilir. Sorgulayıp emir verememek genelde sadece okuma işaretlenip işlem işaretlenmediği anlamına gelir. OKX panelindeki API yönetimine girip bu Key'e işlem yetkisini ekle yeter, yeniden oluşturmaya gerek yok.

Zaman damgası dolması (timestamp expired) ne demek?

OKX istekteki zaman damgasına bir tolerans tanır; bilgisayarının ya da sunucunun sistem saati yanlışsa, toleransı aşacak kadar saparsa, imza zaman damgası dolduğu için reddedilir. Çözüm sistem saatini doğru ağ saatine senkronize etmek, NTP otomatik saat ayarını açmaktır. Bulut sunucular genelde varsayılan açıktır, yerel makineler ara sıra kayar.

«İşlem çifti bulunamadı» hatası neden çıkar?

Önce hatadaki code ve msg'ye bak; bu tür hata symbol alanını işaret eder. ccxt'te spot işlem çiftleri büyük harf ve düz eğik çizgilidir, örneğin BTC/USDT; BTCUSDT, btc/usdt diye yazmak ya da spot emrinde vadeli biçim kullanmak işlem çifti bulunamadı hatası verir. msg bazen hangi alanın geçersiz olduğunu doğrudan söyler, işaret ettiği alana bakmak en az iş çıkarır; emin değilsen önce print(okx.load_markets().keys()) ile mevcut çiftlerin tam olarak nasıl göründüğüne bak.

Hata giderme eşiğini aşınca betiğin durup dururken kilitlenmez. Sırada vakit ayırmaya değer olan şey, risk yönetimini koda yazmaktır — hatadan daha korkutucusu, betiğin hata vermeden sürekli yanlış emir vermesidir. Yeni kodu önce demo hesaba atmayı da unutma, hata gidermek gerçek para harcamaz.