> ## Documentation Index
> Fetch the complete documentation index at: https://docs.robotpos.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Hata Kodları

> Realtime Service API hata kodları ve açıklamaları

# Hata Kodları ve Çözümleri

<Warning>
  API isteklerinizde aşağıdaki hata kodlarıyla karşılaşabilirsiniz. Hata mesajları, sorunun kaynağını belirlemenize ve çözüm bulmanıza yardımcı olacaktır.
</Warning>

## HTTP Hata Kodları

API'den dönen HTTP durum kodları, isteğinizin durumu hakkında bilgi verir. Başarılı istekler genellikle `200 OK` durum kodu ile döner. Hata durumunda aşağıdaki kodlarla karşılaşabilirsiniz:

<div className="overflow-x-auto">
  <table className="w-full">
    <thead>
      <tr className="bg-slate-100 dark:bg-slate-800">
        <th className="text-left p-3 border-b">HTTP Kodu</th>
        <th className="text-left p-3 border-b">Hata Mesajı</th>
        <th className="text-left p-3 border-b">Açıklama</th>
        <th className="text-left p-3 border-b">Çözüm Önerisi</th>
      </tr>
    </thead>

    <tbody>
      <tr className="border-b border-slate-200 dark:border-slate-700">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">400</td>
        <td className="p-3">Type parametresi gereklidir</td>
        <td className="p-3">İstek gövdesinde Type parametresi bulunmamaktadır</td>
        <td className="p-3">İstek gövdesine geçerli bir Type değeri ekleyin</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-800">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">400</td>
        <td className="p-3">Geçersiz Type değeri</td>
        <td className="p-3">Desteklenmeyen bir Type değeri gönderilmiştir</td>
        <td className="p-3">Geçerli bir Type değeri kullanın (101-255 arası)</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">400</td>
        <td className="p-3">StartDate parametresi gereklidir</td>
        <td className="p-3">Type kodu için gerekli olan StartDate parametresi eksik</td>
        <td className="p-3">İstek gövdesine StartDate parametresi ekleyin</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-800">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">400</td>
        <td className="p-3">EndDate parametresi gereklidir</td>
        <td className="p-3">Type kodu için gerekli olan EndDate parametresi eksik</td>
        <td className="p-3">İstek gövdesine EndDate parametresi ekleyin</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">400</td>
        <td className="p-3">BranchCode parametresi gereklidir</td>
        <td className="p-3">Type kodu için gerekli olan BranchCode parametresi eksik</td>
        <td className="p-3">İstek gövdesine BranchCode parametresi ekleyin</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-800">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">401</td>
        <td className="p-3">Geçersiz API anahtarı</td>
        <td className="p-3">Kimlik doğrulama başarısız oldu</td>
        <td className="p-3">API anahtarınızı kontrol edin ve doğru formatta gönderdiğinizden emin olun</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">403</td>
        <td className="p-3">Yetkisiz erişim</td>
        <td className="p-3">API anahtarı bu rapor türüne erişim izni vermiyor</td>
        <td className="p-3">Erişim izinlerinizi kontrol edin veya daha yüksek yetkili bir API anahtarı talep edin</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-800">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">404</td>
        <td className="p-3">Type \[kod] için rapor sorgu dosyası bulunamadı</td>
        <td className="p-3">Belirtilen Type kodu için SQL sorgu dosyası bulunamadı</td>
        <td className="p-3">Geçerli bir Type kodu kullandığınızdan emin olun</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">429</td>
        <td className="p-3">İstek limiti aşıldı</td>
        <td className="p-3">Çok fazla istek gönderildi, lütfen daha sonra tekrar deneyin</td>
        <td className="p-3">İstek sayınızı azaltın veya istekleri zaman içinde dağıtın</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-800">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">500</td>
        <td className="p-3">İç sunucu hatası</td>
        <td className="p-3">Sunucu tarafında bir hata oluştu</td>
        <td className="p-3">Daha sonra tekrar deneyin veya destek ekibiyle iletişime geçin</td>
      </tr>

      <tr className="border-b border-slate-200 dark:border-slate-700">
        <td className="p-3 font-semibold text-red-600 dark:text-red-400">503</td>
        <td className="p-3">Servis kullanılamıyor</td>
        <td className="p-3">API bakım modunda veya geçici olarak kullanılamıyor</td>
        <td className="p-3">Daha sonra tekrar deneyin</td>
      </tr>
    </tbody>
  </table>
</div>

## Hata Yanıt Formatı

API hata durumunda aşağıdaki formatta bir JSON yanıtı döndürür:

```json theme={null}
{
  "error": {
    "code": 400,
    "message": "Type parametresi gereklidir"
  },
  "timestamp": "2025-05-06T12:34:56.789Z"
}
```

<Info>
  Hata yanıtı her zaman bir `error` nesnesi içerir. Bu nesne içinde hata kodu (`code`) ve hata mesajı (`message`) bulunur. Ayrıca yanıtta hatanın oluştuğu zaman damgası (`timestamp`) da yer alır.
</Info>

## Hata Kodları Grupları

Hata kodları, aşağıdaki kategorilere ayrılabilir:

<div className="grid grid-cols-1 md:grid-cols-2 gap-4 mt-6">
  <div className="p-4 border rounded-lg shadow-sm bg-red-50 dark:bg-red-900/20">
    <h3 className="text-lg font-semibold text-red-700 dark:text-red-300">4xx - İstemci Hataları</h3>
    <p className="text-sm text-gray-600 dark:text-gray-300 mb-2">Bu hatalar, istemci tarafından yapılan hatalı isteklerden kaynaklanır.</p>

    <ul className="list-disc pl-5 text-sm">
      <li><strong>400</strong> - İstek formatı veya parametreleri hatalı</li>
      <li><strong>401</strong> - Kimlik doğrulama hatası</li>
      <li><strong>403</strong> - Yetkilendirme hatası</li>
      <li><strong>404</strong> - Kaynak bulunamadı</li>
      <li><strong>429</strong> - İstek limiti aşıldı</li>
    </ul>
  </div>

  <div className="p-4 border rounded-lg shadow-sm bg-orange-50 dark:bg-orange-900/20">
    <h3 className="text-lg font-semibold text-orange-700 dark:text-orange-300">5xx - Sunucu Hataları</h3>
    <p className="text-sm text-gray-600 dark:text-gray-300 mb-2">Bu hatalar, sunucu tarafında oluşan sorunlardan kaynaklanır.</p>

    <ul className="list-disc pl-5 text-sm">
      <li><strong>500</strong> - İç sunucu hatası</li>
      <li><strong>503</strong> - Servis kullanılamıyor</li>
    </ul>
  </div>
</div>

## Hata Yönetimi İpuçları

<Tip>
  API isteklerinizde hataları etkili bir şekilde yönetmek için aşağıdaki önerileri dikkate alın:
</Tip>

1. **Hata Yakalama**: Tüm API isteklerinizi try-catch blokları içinde yapın.

```javascript theme={null}
try {
  const response = await fetch('https://api.example.com/api/salesdata', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      Type: 102,
      StartDate: '2025-05-01 00:00:00',
      EndDate: '2025-05-05 23:59:59',
      BranchCode: '0'
    })
  });
  
  const data = await response.json();
  
  if (!response.ok) {
    throw new Error(`${data.error.code}: ${data.error.message}`);
  }
  
  // Başarılı yanıtı işle
  console.log(data);
} catch (error) {
  console.error('API Hatası:', error.message);
  // Kullanıcıya hata mesajı göster
}
```

2. **Yeniden Deneme Stratejisi**: 429 veya 5xx hataları için yeniden deneme mekanizması kullanın.

```javascript theme={null}
async function fetchWithRetry(url, options, maxRetries = 3, delay = 1000) {
  let retries = 0;
  
  while (retries < maxRetries) {
    try {
      const response = await fetch(url, options);
      const data = await response.json();
      
      if (response.ok) {
        return data;
      }
      
      // 429 veya 5xx hataları için yeniden dene
      if (response.status === 429 || response.status >= 500) {
        retries++;
        if (retries >= maxRetries) {
          throw new Error(`${data.error.code}: ${data.error.message}`);
        }
        
        // Üstel geri çekilme (exponential backoff)
        const waitTime = delay * Math.pow(2, retries - 1);
        console.log(`Yeniden deneniyor (${retries}/${maxRetries}) ${waitTime}ms sonra...`);
        await new Promise(resolve => setTimeout(resolve, waitTime));
      } else {
        // Diğer hata kodları için hemen hata fırlat
        throw new Error(`${data.error.code}: ${data.error.message}`);
      }
    } catch (error) {
      if (retries >= maxRetries) {
        throw error;
      }
    }
  }
}
```

3. **Hata Günlüğü**: Tüm API hatalarını günlüğe kaydedin ve analiz edin.

<Check>
  Düzenli hata günlüğü analizi, API kullanımınızı optimize etmenize ve sorunları proaktif olarak çözmenize yardımcı olur.
</Check>

## Sık Karşılaşılan Sorunlar ve Çözümleri

<div className="mt-6 space-y-4">
  <div className="p-4 border-l-4 border-amber-500 bg-amber-50 dark:bg-amber-900/20">
    <h4 className="font-semibold">401 - Geçersiz API anahtarı</h4>
    <p className="text-sm mt-1">API anahtarınızın doğru formatta olduğundan emin olun. API anahtarı, Authorization başlığında "Bearer" önekiyle birlikte gönderilmelidir.</p>

    <pre className="text-xs bg-slate-100 dark:bg-slate-800 p-2 mt-2 rounded overflow-x-auto">
      Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    </pre>
  </div>

  <div className="p-4 border-l-4 border-amber-500 bg-amber-50 dark:bg-amber-900/20">
    <h4 className="font-semibold">400 - Geçersiz Type değeri</h4>
    <p className="text-sm mt-1">Type değerinin desteklenen bir rapor tipi olduğundan emin olun. Geçerli Type değerleri 101-255 aralığındadır.</p>
  </div>

  <div className="p-4 border-l-4 border-amber-500 bg-amber-50 dark:bg-amber-900/20">
    <h4 className="font-semibold">429 - İstek limiti aşıldı</h4>
    <p className="text-sm mt-1">API istek limitinizi aştınız. İsteklerinizi zaman içinde dağıtın veya daha yüksek limitli bir plan için bizimle iletişime geçin.</p>
  </div>
</div>

## Destek Alın

<Info>
  API kullanımıyla ilgili sorunlarınız veya sorularınız için destek ekibimizle iletişime geçebilirsiniz.
</Info>

* **E-posta**: [destek@robotpos.com](mailto:destek@robotpos.com)

API hatalarıyla ilgili destek talebi oluştururken, lütfen aşağıdaki bilgileri paylaşın:

* Hata kodu ve mesajı
* İstek detayları (endpoint, parametreler)
* Hatanın oluştuğu tarih ve saat
* Kullandığınız API anahtarının son 4 karakteri
