Hata Referansı

Hatalar ve Rate Limits

Hata kodları, HTTP status eşlemesi, rate limit politikaları ve retry stratejileri için tam referans.

HTTP Status Kodları

Modern REST API standart HTTP status kodları kullanır. Response body yapılandırılmış hata objesi içerir.

KodStatusAnlam
400Bad Requestİstek doğrulaması başarısız (eksik veya geçersiz parametreler)
401UnauthorizedKimlik doğrulama gerekli veya API anahtarı geçersiz
402Payment RequiredAksiyon için yetersiz cüzdan bakiyesi
403ForbiddenKimliği doğrulanmış ancak bu kaynak için yetkisiz
404Not FoundKaynak bulunamadı (örn. activation ID yok)
409Conflictİstek mevcut state ile çakışıyor (örn. activation zaten tamamlanmış)
422Unprocessable Entityİstek formatı doğru ama anlamsal olarak geçersiz
429Too Many RequestsRate limit aşıldı — Retry-After header'a bak
500Internal Server ErrorBeklenmeyen sunucu hatası — exponential backoff ile retry et
503Service UnavailableUpstream sağlayıcı erişilemez — daha sonra retry et

Hata response gövdesi (JSON)

HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 27937
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 2026-05-10T00:00:00.000Z

{
  "error": "rate_limit_exceeded",
  "message": "Daily API limit reached. Contact support for higher tier.",
  "retryAfter": 27937,
  "limit": 10000,
  "usage": 10000
}

SMS-Activate Text Kodları

SMS-Activate uyumlu endpoint plain text kodlar döner. Her kod bir HTTP status'a eşlenir.

Text KodHTTPAnlam
BAD_KEY401Geçersiz veya eksik API anahtarı
BAD_ACTION400Action parametresi eksik veya hatalı
BAD_SERVICE400Service kodu tanınmıyor
BAD_COUNTRY400Country parametresi tanınmıyor
BAD_STATUS400setStatus için geçersiz status değeri
WRONG_ACTION400Action ismi desteklenmiyor
NO_BALANCE402Yetersiz cüzdan bakiyesi
NO_NUMBERS404Bu service+country kombinasyonu için numara yok
NO_ACTIVATION404Activation ID bulunamadı veya size ait değil
RATE_LIMITED429Rate limit aşıldı — yavaşlat veya reset bekle
ERROR_SQL500İç sunucu hatası — daha sonra retry et

Rate Limits

API anahtarı bazlı throttle. Aynı anahtarı kullanan birden fazla sunucu tek bucket paylaşır.

Burst limitleri

Üç eş zamanlı throttle tier ani patlamalara ve sürekli kötüye kullanıma karşı koruma sağlar. Herhangi bir tier'a ulaşınca 429 döner.

short
5
/ 1 second
medium
30
/ 10 seconds
long
100
/ 60 seconds

Günlük Kota

API anahtarı başına günde 10,000 istek (varsayılan). UTC gece yarısında sıfırlanır.

  • Public catalog endpoint'leri (services, countries) günlük kotadan muaftır
  • Kota sayacı her authenticated istekte artar, response status fark etmez
  • Daha yüksek limitli Pro tier mevcut — destekle iletişime geç

Response Header'ları

Her authenticated API response rate limit header'ları içerir, böylece istemciler proaktif olarak self-throttle yapabilir.

X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9543
X-RateLimit-Reset: 2026-05-10T00:00:00.000Z
Retry-After: 27937

Retry Stratejisi

Geçici hataları API'yi boğmadan ve veri kaybetmeden ele alma.

Yap

  • 429 cevaplarında Retry-After header'a uy
  • 5xx hatalarında exponential backoff kullan (1s, 2s, 4s, 8s)
  • En fazla 5 deneme yap, sonra hatayı kullanıcıya göster

Yapma

  • 429 dışındaki 4xx hatalarını retry etme — onlar deterministik
  • 429 sonrası API'yi sıkıştırma — Retry-After süresini tam bekle
  • POST /activations'ı idempotency kontrol etmeden retry etme

Önerilen retry deseni

# Pseudocode — exponential backoff with Retry-After
attempt = 0
while attempt < 5:
    response = call_api()

    if response.status == 200:
        break  # success

    if response.status == 429:
        wait = response.headers.get('Retry-After', 2 ** attempt)
        sleep(wait)
        attempt += 1
        continue

    if response.status >= 500:
        sleep(2 ** attempt)  # exponential
        attempt += 1
        continue

    raise APIError(response)  # 4xx other than 429

Idempotency

Bazı operasyonlar cüzdanı tahsil eder — naif retry çift ücretlendirmeye yol açabilir.

POST /activations idempotent değildir

Başarılı bir POST /activations'ı retry edersen ikinci bir activation oluşur ve iki kez ücretlendirilirsin. Timeout veya belirsiz cevap durumunda retry'dan önce GET /activations ile state'i doğrula.

Daha fazla detay mı?

İnteraktif API referansı her endpoint için hata cevaplarını gösterir.