Hata Kodları ve Limitler

Operasyon

Hata Kodları ve Limitler

Public müşteri API’sinde görülen auth, plan ve rate limit davranışları.

Public müşteri API’si auth, yetki, plan ve boyut limitlerini ayrı hata kodları ile döndürür. İstemci tarafında 401, 403, 413 ve 429 ayrımını ayrı loglamanız önerilir.

Yaygın hata kodları

KodHTTPAnlam
UNAUTHORIZED401JWT veya API key bulunamadı
INVALID_TOKEN401JWT doğrulanamadı
INVALID_API_KEY401API key biçimi veya içeriği geçersiz
API_KEY_PERMISSION_DENIED403Anahtar gerekli izne sahip değil
RATE_LIMIT_EXCEEDED429İlgili havuzun istek limiti aşıldı
CONTACT_LIST_LIMIT_REACHED403Aktif plan kişi listesi limiti dolu
ASSET_UPLOAD_NOT_ALLOWED403Aktif plan dosya gönderimini desteklemiyor
SUBSCRIPTION_REQUIRED403İşlem için aktif plan veya uygun abonelik gerekli
FILE_TOO_LARGE413Dosya istek veya plan limitini aştı
INVALID_FILE_TYPE400Yalnızca desteklenen CSV/XLSX veya medya türleri kabul edilir
CONTACT_LIST_EMPTY400Geçerli satır bulunamadı

Örnek hata yanıtı

{
  "error": {
    "code": "ASSET_UPLOAD_NOT_ALLOWED",
    "message": "aktif plan bu işlem için dosya gönderimini desteklemiyor",
    "request_id": "3ab4db66-3101-462b-a677-c3c25537d96f"
  }
}

Operasyonel limitler

Mesaj kotası

Her alıcı ayrı mesaj olarak sayılır. Tek istek içinde çok alıcı varsa kota buna göre düşer.

Kişi listesi limiti

Free, Pro ve Growth planlarında toplam kayıtlı liste sayısı plan limitine tabidir.

Dosya boyutu

Dosya yükleme hem genel request limiti hem plan bazlı MIME ve boyut politikası ile kontrol edilir.

Rate limit davranışı

Rate limit, her istek sınıfı için ayrı bir havuz (bucket) üzerinden uygulanır; bir havuzun tükenmesi diğerlerini etkilemez. Limit, kimliği doğrulanmış kullanıcı bazında (anonim isteklerde IP bazında) sayılır. Varsayılan limitler:

HavuzKapsanan uçlarLimitPencere
messageMesaj gönderimi, kampanya ve dosya (message-assets) yükleme1000 istek1 saat
otpPOST /v1/messages/otp (ayrı havuz)1000 istek1 saat
deviceCihaz yazma uçları (panel)100 istek5 dakika
device_readCihaz okuma uçları (panel)120 istek1 dakika
authKimlik/oturum uçları (panel)50 istek5 dakika

Kişi listesi işlemleri (/v1/contact-lists) kendi ayrı havuzuna tabidir; mesaj veya auth havuzunu tüketmez. Dosya yükleme yüzeyi message havuzuna bağlıdır.

429 yanıt gövdesi

Limit aşıldığında 429 Too Many Requests ve şu gövde döner:

{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Çok fazla istek gönderildi. Limit: 1000 / 1h0m0s",
    "retry_after": 3600
  }
}

retry_after alanı, havuzun sıfırlanması için beklenmesi gereken saniye cinsinden süredir.

Yanıt başlıkları

BaşlıkAnlam
X-Rate-Limit-LimitHavuzun pencere başına toplam istek limiti
X-Rate-Limit-RemainingBu pencerede kalan istek sayısı
X-Rate-Limit-WindowHavuz penceresinin süresi (yalnızca 429 yanıtında)
Retry-AfterYeniden denemeden önce beklenecek saniye (standart başlık, 429 yanıtında)

X-Rate-Limit-Remaining her yanıtta döner; 0’a yaklaştığında isteklerinizi yavaşlatın. 429 aldığınızda Retry-After (veya retry_after) kadar bekleyip exponential backoff uygulayın.

Bu dokümanın dışında kalan alanlar

Aşağıdaki alanlar public müşteri API yüzeyinin parçası olmadığı için burada dokümante edilmez:

  • Auth ve oturum işlemleri
  • API key yönetimi
  • Device ve QR uçları
  • Billing, abonelik ve fatura
  • Profil ve güvenlik ayarları
  • Genel usage ve dashboard istatistikleri

Pratik öneriler

  • request_id değerini kendi loglarınıza kaydedin.
  • 401 ile 403 durumlarını aynı havuzda toplamayın; biri kimlik, diğeri yetki problemidir.
  • Import ve upload hatalarında kullanıcıya ham backend hatasını değil kendi alanınıza uygun açıklamayı gösterin.
  • 429 sonrası exponential backoff ve tekrar deneme limiti uygulayın.