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ı
| Kod | Anlamı | Ne yapmalı |
|---|---|---|
| 200 OK | Başarılı | — |
| 201 Created | Kaynak oluşturuldu | Location başlığındaki kanonik adresi okuyun |
| 400 Bad Request | Doğrulama hatası | İsteği düzeltin; aynı haliyle tekrar denemeyin |
| 401 Unauthorized | Kimlik eksik veya hatalı | Bearer token’ı kontrol edin; tekrar DENEMEYİN |
| 402 Payment Required | Bakiye yetersiz | Yükleme yapın, sonra tekrar deneyin |
| 403 Forbidden | Kimlik doğru, yetki yetersiz | Doğru kapsamda anahtar üretin |
| 404 Not Found | Kaynak yok | Tekrar denemeyin; kimliği kontrol edin |
| 409 Conflict | Durum veya idempotens çakışması | İnceleyin; genelde tekrar denenmez |
| 422 Unprocessable | Şema doğru ama mantıken hatalı | İsteği düzeltin |
| 429 Too Many Requests | Hız sınırı aşıldı | Bekleyin; Retry-After başlığına uyun |
| 500 Internal Server Error | Platform tarafında hata | Artan aralıklarla tekrar deneyin |
| 502 / 503 / 504 | Üst katmanda sorun | Artan 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: 1755432000Sı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
| Belirti | Muhtemel neden |
|---|---|
| Tüm istekler 401 | Anahtar iptal edilmiş veya Bearer öneki eksik |
| GET çalışıyor, POST 403 | Anahtar salt-okuma olarak üretilmiş |
| Arama başlatınca 402 | Bakiye asgari tutarın ($0.01) altında |
| Aralıklı 429 | Yoklama sıklığı çok yüksek — webhook’a geçin |
| 400 + field: to_number | Numara 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.