Hatalar ve Limitler
API hatalarını, durum kodlarını ve plan bazlı kaynak limitlerini anlayın.
API hatalarını, rate limit'leri ve plan kısıtlamalarını anlama.
Hata Yanıt Formatı
Tüm hatalar tutarlı bir formatı takip eder:
{
"statusCode": 400,
"statusMessage": "Name is required",
"message": "Name is required",
"url": "/api/v1/minds",
"error": true
}
| Alan | Açıklama |
|---|---|
statusCode | HTTP durum kodu |
statusMessage | İnsan tarafından okunabilir hata açıklaması (handler tarafından hata başına ayarlanır — doğrulama hataları için bu, belirli sorundur, örn. "Mind not found" veya "Invalid Mind ID format") |
message | v1 hataları için statusMessage ile aynı içerik. Debug build'lerde 5xx yanıtlarında stack/ekstra bağlam için ayrılmıştır. |
url | İstek yolu (Nuxt H3 tarafından eklenir) |
error | Hata yanıtları için true (Nuxt H3 tarafından eklenir) |
Programatik işleme için her zaman
statusCode'a ve insan tarafından okunabilir neden içinstatusMessage'a (veyamessage) güvenin.urlveerroralanları, temel framework'ten gelen kullanışlı metadata'dır.
HTTP Durum Kodları
2xx Başarı
| Kod | Durum | Açıklama |
|---|---|---|
| 200 | OK | İstek başarılı |
| 201 | Created | Kaynak başarıyla oluşturuldu (örn. POST /minds, POST /minds/{id}/knowledge) |
| 202 | Accepted | İstek asenkron işleme için kabul edildi (örn. keywords ile POST /minds/{id}/knowledge) |
| 204 | No Content | İstek başarılı, yanıt body'si yok (örn. DELETE /minds/{id}/knowledge/{itemId}) |
4xx İstemci Hataları
| Kod | Durum | Açıklama |
|---|---|---|
| 400 | Bad Request | Geçersiz istek parametreleri |
| 401 | Unauthorized | Eksik veya geçersiz API key |
| 403 | Forbidden | Erişim reddedildi veya plan limitine ulaşıldı |
| 404 | Not Found | Kaynak mevcut değil |
| 415 | Unsupported Media Type | Yanlış Content-Type header'ı |
| 422 | Unprocessable Entity | İstek doğru biçimde oluşturulmuş ancak yürütülemiyor; örneğin 10'dan az hazır Mind'ı olan bir Kitle için doğrulama başlatmak (AUDIENCE_TOO_SMALL) |
| 429 | Too Many Requests | Rate limit aşıldı |
5xx Sunucu Hataları
| Kod | Durum | Açıklama |
|---|---|---|
| 500 | Internal Server Error | Sunucu tarafı hata |
| 503 | Service Unavailable | Servis geçici olarak kullanılamıyor |
Yaygın Hatalar
400 Bad Request
Eksik Zorunlu Alan:
{
"statusCode": 400,
"statusMessage": "Name is required"
}
Geçersiz Giriş:
{
"statusCode": 400,
"statusMessage": "File too large: document.pdf (55.2MB). Maximum size is 50MB."
}
401 Unauthorized
Eksik API Key:
{
"statusCode": 401,
"statusMessage": "Unauthorized"
}
Çözüm: Authorization header'ını ekleyin:
-H "Authorization: Bearer minds_your_api_key"
403 Forbidden
Plan Limitine Ulaşıldı:
{
"statusCode": 403,
"statusMessage": "Starter plan limit reached",
"message": "Starter plan limit reached",
"url": "/api/v1/minds",
"error": true,
"data": {
"code": "PLAN_LIMIT",
"limitType": "sparks",
"currentPlan": "premium",
"limit": 100,
"current": 100
}
}
Erişim Reddedildi:
{
"statusCode": 403,
"statusMessage": "Access denied"
}
404 Not Found
Kaynak Mevcut Değil:
{
"statusCode": 404,
"statusMessage": "Mind not found"
}
415 Unsupported Media Type
Yanlış Content-Type:
{
"statusCode": 415,
"statusMessage": "Unsupported Content-Type. Use application/json for links or multipart/form-data for files"
}
Çözüm: Doğru Content-Type header'ını kullanın:
- JSON istekleri için
application/json - Dosya yüklemeleri için
multipart/form-data
429 Too Many Requests
Rate Limit Aşıldı:
{
"statusCode": 429,
"statusMessage": "Too many requests. Please try again later."
}
Rate Limit'ler
v1 API kimliği doğrulanmış hesap başına sabit pencere sınırı uygular. Varsayılan dağıtım sınırı dakikada 300 istektir ancak yapılandırılabilir. Her zaman RateLimit-Limit ve RateLimit-Remaining başlıklarını okuyun; 429 sonrasında Retry-After içinde belirtilen saniye kadar bekleyin.
Plan Limitleri
Güncel herkese açık varsayılanlar için oluşturulan plan limiti tablosuna bakın. Sözleşmeye özel geçersiz kılmalar farklı olabilir; bu nedenle kimliği doğrulanmış bir hatadaki data.limit ve data.current o istek için bağlayıcıdır. Starter planı API payload'larında "premium" olarak görünür.
Mind limiti örneği
Limite ulaşıldığında hata:
{
"statusCode": 403,
"statusMessage": "Starter plan limit reached",
"message": "Starter plan limit reached",
"url": "/api/v1/minds",
"error": true,
"data": {
"code": "PLAN_LIMIT",
"limitType": "sparks",
"currentPlan": "premium",
"limit": 100,
"current": 100
}
}
Bilgi Yükleme Limitleri
- Dosya Boyutu: Dosya başına maksimum 50MB (tüm planlar)
- Depolama: Şu anda açık depolama limiti uygulanmıyor
API Key Limitleri
- Maksimum Key: Şu anda herhangi bir üst sınır uygulanmıyor.
Kitle doğrulama hataları
10'dan az hazır Mind'ı olan bir Kitle için Kitle doğrulaması başlatmak, AUDIENCE_TOO_SMALL koduyla 422 döndürür. Planınızın bir Çalışmada izin verdiğinden büyük bir Kitle, yukarıda açıklanan standart plan limiti hatasıyla reddedilir.
Başarılı bir başlatmanın ardından doğrulama arka planda çalışır; bu yüzden hataların çoğu HTTP hatası değildir. Bunları doğrulama işinin (batch) failure alanından okuyun. Bir batch şu kodlardan biriyle bitebilir:
| Kod | Anlamı |
|---|---|
AUDIENCE_TOO_SMALL | Kitlenin 10'dan az hazır Mind'ı var. Doğrulama başlatılırken 422 olarak da döner |
MINDS_NEED_RETRAINING | Kitledeki Mind'ların yanıt verebilmesi için yeniden eğitilmesi gerekiyor |
NOT_ENOUGH_QUESTIONS | Kitleye uyan 8'den az soru var, bu yüzden hiçbir şey sorulmadı |
NOT_ENOUGH_RESPONSES | Çalıştırma, kalan sentetik yanıtlarınızdan fazlasını gerektiriyor |
NO_FITTING_SURVEY | Kitleye uyan yayımlanmış bir anket yok |
NO_USABLE_SURVEY | Anketlerin hiçbiri bu Kitleyi doğrulayamıyor |
NO_SCORE | Anketlerin hiçbiri bu Kitle için puanlanamadı |
RUNS_REFUSED | Doğrulama çalıştırması başlatılamadı |
SURVEY_NOT_FOUND | Belirtilen bir anket bulunamadı |
SURVEY_FILES_UNREADABLE | Yüklenen anket dosyaları okunamadı |
SURVEY_RESULTS_NOT_FOUND | Yüklenen dosyalarda karşılaştırılacak yayımlanmış sonuç yok |
VALIDATION_TOO_LARGE | Doğrulama 30.000'den fazla yanıt isterdi |
En İyi Uygulamalar
Hata İşleme
Hataları her zaman işleyin:
async function requestJson(url, apiKey, data) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
const text = await response.text();
let result = null;
if (text) {
try {
result = JSON.parse(text);
} catch {
if (response.ok) throw new Error('Expected a JSON response');
}
}
if (!response.ok) {
throw Object.assign(new Error(result?.statusMessage || result?.message || `HTTP ${response.status}`), {
status: response.status,
data: result?.data,
retryAfter: response.headers.get('Retry-After')
});
}
return result;
}
Yeniden Deneme Mantığı
Akıllı yeniden denemeler uygulayın:
- Geçici
429veya5xxyanıtlarında okuma işlemlerini sınırlı üssel beklemeyle yeniden deneyin veRetry-Afterdeğerine uyun. Yazma işlemlerini yalnızca uç nokta idempotency desteğini belgeliyorsa aynı anahtar ve istek gövdesiyle yeniden deneyin. Belirsiz bir zaman aşımından sonra tekrar göndermeden önce mevcut kaynağı veya işi kontrol edin. - Üssel geri çekilme (exponential backoff) kullanın
- Maksimum yeniden deneme sayısı belirleyin
4xxhatalarında yeniden denemeyin (429 hariç)
İzleme
Kullanımınızı takip edin:
- Rate limit header'larını loglayın
- Hata oranlarını izleyin
- Tekrarlayan hatalar için alertler kurun
- Yanıt sürelerini takip edin
Gerektiğinde Yükseltin
Şu durumlarda planınızı yükseltin:
- Sık sık rate limit'e takılıyorsanız
- Daha fazla mind'a ihtiyacınız varsa
- Daha büyük dosya yüklemeleri gerekiyorsa
- Öncelikli destek istiyorsanız
Yardım Alma
Durumu Kontrol Edin
Servis durumumuzu izleyin:
- Minds hizmet durumu
- Güncellemeler için @mindsai_co hesabını takip edin
Destek İletişim
Aşağıdakileri yaşıyorsanız:
- Kalıcı 500 hataları
- Yanlış rate limit uygulanması
- Beklenmedik davranış
Bize ulaşın:
- Geri bildirim formu
- E-posta: [email protected]
Dokümantasyonu İnceleyin
Durum Kodları Referansı
Tüm HTTP durum kodları için hızlı referans:
2xx Success
├─ 200 OK
└─ 201 Created
4xx Client Error
├─ 400 Bad Request
├─ 401 Unauthorized
├─ 403 Forbidden
├─ 404 Not Found
├─ 415 Unsupported Media Type
└─ 429 Too Many Requests
5xx Server Error
├─ 500 Internal Server Error
└─ 503 Service Unavailable


