Hatalar ve hız sınırları

Dönen HTTP kodları, hata gövdesi, hız sınırı başlıkları, Retry-After anlamı, idempotency key ve üretimde işe yarayan yeniden deneme stratejisi.

Güncellendi: 17 Ağustos 2026

Üretimdeki sorunlar mutlu yoldan değil, mutsuz yolun nasıl karşılandığından doğar. Bu sayfa hangi kodun ne anlama geldiğini ve her birinde ne yapmanız gerektiğini anlatır.

Göreceğiniz durum kodları

KodAnlamıNe yapmalı
200 OKBaşarılı
201 CreatedKaynak oluşturulduLocation başlığındaki kanonik adresi okuyun
400 Bad RequestDoğrulama hatasıİsteği düzeltin; aynı haliyle tekrar denemeyin
401 UnauthorizedKimlik eksik veya hatalıBearer token’ı kontrol edin; tekrar DENEMEYİN
402 Payment RequiredBakiye yetersizYükleme yapın, sonra tekrar deneyin
403 ForbiddenKimlik doğru, yetki yetersizDoğru kapsamda anahtar üretin
404 Not FoundKaynak yokTekrar denemeyin; kimliği kontrol edin
409 ConflictDurum veya idempotens çakışmasıİnceleyin; genelde tekrar denenmez
422 UnprocessableŞema doğru ama mantıken hatalıİsteği düzeltin
429 Too Many RequestsHız sınırı aşıldıBekleyin; Retry-After başlığına uyun
500 Internal Server ErrorPlatform tarafında hataArtan aralıklarla tekrar deneyin
502 / 503 / 504Üst katmanda sorunArtan aralıklarla tekrar deneyin

Hata gövdesi

Tüm hatalar aynı yapıyı taşır. request_id alanını mutlaka loglayın: destek talebi açtığınızda isteği tüm iç adımlarda izlemek için ihtiyacımız olan tek bilgi bu.

{
  "error": {
    "code": "validation_failed",
    "message": "to_number must be in E.164 format",
    "field": "to_number",
    "request_id": "req_abc123"
  }
}

E.164 biçimi, ülke kodu artı numara demek — Türkiye için +905321234567 gibi. Başında sıfır olan yerel biçim (0532...) reddedilir.

Hız sınırları

Sınırlar API anahtarı bazında ve kayan pencere yöntemiyle uygulanır. Her yanıt nerede olduğunuzu söyleyen başlıkları taşır.

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 873
X-RateLimit-Reset: 1755432000

Sınır tükendiğinde 429 ve saniye cinsinden Retry-After başlığı döner. Bu süre kadar bekleyip tekrar deneyin.

HTTP/1.1 429 Too Many Requests
Retry-After: 12
  • Anahtar başına varsayılan sınır dakikada 1000 istek, üst sınır 10000’e kadar ayarlanabilir.
  • Kimlik istemeyen açık uçlarda sınır IP başınadır ve belirgin şekilde daha sıkıdır.
  • Giriş, kayıt ve davet gibi hassas uçlarda ayrı ve sabit sınırlar vardır; anahtar ayarınız bunları gevşetemez.

429 gördüğünüzde hemen tekrar denemek durumu kötüleştirir — pencere kaymadığı için istekleriniz boşa gider ve sınır sürekli dolu kalır. Retry-After değerine uyun.

İdempotens anahtarı

Kaynak oluşturan POST isteklerinde (arama, asistan, planlama) Idempotency-Key başlığı gönderin. Aynı anahtarla yapılan tekrar, yeni kayıt oluşturmak yerine ilk yanıtı döndürür.

curl -X POST https://api.call2me.app/v1/calls \
  -H "Authorization: Bearer sk_live_..." \
  -H "Idempotency-Key: 8c7b3a4d-1e2f-4abc-9def-0123456789ab" \
  -H "Content-Type: application/json" \
  -d '{"agent_id": "agent_abc123", "to_number": "+905321234567"}'

Yanıt anahtarınıza bağlı olarak yaklaşık 24 saat saklanır. Her mantıksal istek için yeni bir UUID üretin; gerçekten farklı istekler arasında aynı anahtarı tekrar kullanmayın.

402 özel bir durumdur

402, kod hatası değildir — bakiye yetersizdir. Arama hiç kurulmadığı için boşa maliyet oluşmaz. Otomatik tahsilat açıksa bu hatayı neredeyse hiç görmezsiniz.

{
  "error": {
    "code": "insufficient_balance",
    "message": "Wallet balance below minimum to start call",
    "balance_usd": 0.005,
    "required_usd": 0.01
  }
}

Üretimde işe yarayan yeniden deneme

deneme 1 → 502
1 sn bekle
deneme 2 → 502
2 sn bekle
deneme 3 → 502
4 sn bekle
deneme 4 → başarılı
  • En fazla 5 deneme.
  • Toplam bekleme en fazla 30 saniye.
  • 4xx asla yeniden denenmez (408 ve 429 istisna).
  • Retry-After varsa mutlaka ona uyulur.
  • Bekleme süresine küçük rastgele bir sapma (jitter) ekleyin — aksi halde tüm istemcileriniz aynı anda geri döner.

Çoğu HTTP istemci kütüphanesinde bu davranış zaten var. Kütüphaneyi kullanın; yeniden deneme mantığını elle yazmak nadiren kazanç sağlar.

Hızlı teşhis tablosu

BelirtiMuhtemel neden
Tüm istekler 401Anahtar iptal edilmiş veya Bearer öneki eksik
GET çalışıyor, POST 403Anahtar salt-okuma olarak üretilmiş
Arama başlatınca 402Bakiye asgari tutarın ($0.01) altında
Aralıklı 429Yoklama sıklığı çok yüksek — webhook’a geçin
400 + field: to_numberNumara E.164 biçiminde değil

Sık sorulanlar

5xx hatalarını tekrar denemek güvenli mi?

Evet, artan aralıklarla. 5xx platform tarafındaki bir hatayı gösterir. GET, PUT ve DELETE zaten idempotenttir; POST için Idempotency-Key başlığı kullanarak tekrarları güvenli hale getirin.

Hız sınırı nasıl işliyor?

API anahtarı bazında, kayan pencere yöntemiyle. X-RateLimit-Limit ve X-RateLimit-Remaining başlıkları durumunuzu söyler. Sıfıra indiğinizde Retry-After başlığıyla 429 alırsınız.

Idempotency key nedir?

POST istekleriyle gönderdiğiniz, istemcinizin ürettiği bir UUID. Platform kısa bir pencere boyunca (yaklaşık 24 saat) yanıtı bu anahtara göre saklar; aynı anahtarla tekrar denerseniz mükerrer kayıt oluşmaz, ilk yanıt döner.

Neden 402 Payment Required alıyorum?

Cüzdan bakiyesi arama başlatmak için gereken asgari tutarın altında. Asgari bakiye $0.01’dir. Panelden veya POST /v1/wallet/topup ile yükleme yapıp tekrar deneyin.

GET istekleri çalışıyor ama POST 403 dönüyor, neden?

Anahtarınız salt-okuma olarak üretilmiş. Bu anahtarlar GET dışındaki tüm metotlarda 403 döner. Yazma yetkisi için yeni bir anahtar üretin.

10 dakikada AI telefon asistanınızı kurun

Kod yok. Kart yok. Sadece bir telefon numarası.