Minds Team

الأخطاء والحدود

فهم أخطاء API ورموز الحالة وحدود الموارد حسب الباقة.

فهم أخطاء API و rate limits وقيود الباقات.

تنسيق استجابة الخطأ

تتبع جميع الأخطاء تنسيقاً موحداً:

{
  "statusCode": 400,
  "statusMessage": "Name is required",
  "message": "Name is required",
  "url": "/api/v1/sparks",
  "error": true
}
FieldDescription
statusCodeرمز حالة HTTP
statusMessageوصف الخطأ بصيغة مقروءة (يُضبط لكل خطأ من قبل المعالج — لأخطاء التحقق يكون هذا المشكلة المحددة، مثلاً "Spark not found" أو "Invalid spark ID format")
messageنفس محتوى statusMessage لأخطاء v1. محجوز لمحتوى الـ stack/سياق إضافي في استجابات 5xx في بنايات التصحيح.
urlمسار الطلب (يُضيفه Nuxt H3)
errortrue لاستجابات الخطأ (يُضيفه Nuxt H3)

اعتمد دائماً على statusCode للمعالجة البرمجية وعلى statusMessage (أو message) للسبب المقروء. الحقلان url وerror بيانات تعريف مساعدة من الإطار الأساسي.

رموز حالة HTTP

2xx Success

CodeStatusDescription
200OKنجح الطلب
201Createdتم إنشاء المورد بنجاح (مثلاً POST /sparks, POST /sparks/{id}/knowledge)
202Acceptedتم قبول الطلب للمعالجة غير المتزامنة (مثلاً POST /sparks/{id}/knowledge مع keywords)
204No Contentنجح الطلب بدون جسم استجابة (مثلاً DELETE /sparks/{id}/knowledge/{itemId})

4xx Client Errors

CodeStatusDescription
400Bad Requestمعاملات طلب غير صالحة
401Unauthorizedمفتاح API مفقود أو غير صالح
403Forbiddenتم رفض الوصول أو تم بلوغ حد الباقة
404Not Foundالمورد غير موجود
415Unsupported Media Typeترويسة Content-Type خاطئة
429Too Many Requestsتم تجاوز rate limit

5xx Server Errors

CodeStatusDescription
500Internal Server Errorخطأ من جانب الخادم
503Service Unavailableالخدمة غير متاحة مؤقتاً

الأخطاء الشائعة

400 Bad Request

حقل مطلوب مفقود:

{
  "statusCode": 400,
  "statusMessage": "Name is required"
}

إدخال غير صالح:

{
  "statusCode": 400,
  "statusMessage": "File too large: document.pdf (55.2MB). Maximum size is 50MB."
}

401 Unauthorized

مفتاح API مفقود:

{
  "statusCode": 401,
  "statusMessage": "Unauthorized"
}

الحل: ضمّن ترويسة Authorization:

-H "Authorization: Bearer minds_your_api_key"

403 Forbidden

تم بلوغ حد الباقة:

{
  "statusCode": 403,
  "statusMessage": "Individual plan limit reached",
  "message": "Individual plan limit reached",
  "url": "/api/v1/sparks",
  "error": true,
  "data": {
    "code": "PLAN_LIMIT",
    "limitType": "sparks",
    "currentPlan": "premium",
    "limit": 100,
    "current": 100
  }
}

تم رفض الوصول:

{
  "statusCode": 403,
  "statusMessage": "Access denied"
}

404 Not Found

المورد غير موجود:

{
  "statusCode": 404,
  "statusMessage": "Spark not found"
}

415 Unsupported Media Type

Content-Type خاطئ:

{
  "statusCode": 415,
  "statusMessage": "Unsupported Content-Type. Use application/json for links or multipart/form-data for files"
}

الحل: استخدم ترويسة Content-Type الصحيحة:

  • application/json لطلبات JSON
  • multipart/form-data لرفع الملفات

429 Too Many Requests

تم تجاوز Rate Limit:

{
  "statusCode": 429,
  "statusMessage": "Too many requests. Please try again later."
}

Rate Limits

يفرض v1 API حداً ثابت النافذة لكل حساب مصادق عليه. الحد الافتراضي للنشر هو 300 طلب في الدقيقة، لكنه قابل للضبط. اقرأ دائماً RateLimit-Limit وRateLimit-Remaining، وعند 429 انتظر عدد الثواني في Retry-After.

حدود الباقات

الباقات المختلفة لها حدود موارد مختلفة.

حدود الـ Minds

PlanMaximum Minds
Freeغير محدود
Premium100
Teamغير محدود

خطأ عند بلوغ الحد:

{
  "statusCode": 403,
  "statusMessage": "Individual plan limit reached",
  "message": "Individual plan limit reached",
  "url": "/api/v1/sparks",
  "error": true,
  "data": {
    "code": "PLAN_LIMIT",
    "limitType": "sparks",
    "currentPlan": "premium",
    "limit": 100,
    "current": 100
  }
}

حدود رفع المعرفة

  • حجم الملف: حد أقصى 50MB لكل ملف (لجميع الباقات)
  • التخزين: لا توجد حدود تخزين صريحة مفروضة حالياً

حدود مفاتيح API

  • الحد الأقصى للمفاتيح: لا يُفرض حاليًا أي حد أقصى.

أفضل الممارسات

معالجة الأخطاء

عالج الأخطاء دائماً:

try {
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
  });

  if (!response.ok) {
    const error = await response.json();
    console.error(`Error ${error.statusCode}: ${error.message}`);
    // Handle specific errors
    if (error.statusCode === 429) {
      // Implement retry logic
    }
  }

  const result = await response.json();
  return result;
} catch (error) {
  console.error('Network error:', error);
}

منطق إعادة المحاولة

طبّق إعادات محاولة ذكية:

  • أعد المحاولة عند 429 (rate limit) وأخطاء 5xx
  • استخدم exponential backoff
  • اضبط حداً أقصى لعدد المحاولات
  • لا تعيد المحاولة عند أخطاء 4xx (باستثناء 429)

المراقبة

تتبّع استخدامك:

  • سجّل ترويسات rate limit
  • راقب معدلات الأخطاء
  • اضبط تنبيهات للأخطاء المتكررة
  • تتبّع أوقات الاستجابة

الترقية عند الحاجة

رقّ باقتك إذا كنت:

  • تصل إلى rate limits بشكل متكرر
  • تحتاج إلى المزيد من الـ minds
  • تطلب رفع ملفات أكبر
  • ترغب في دعم ذي أولوية

عرض الباقات

الحصول على المساعدة

تحقق من الحالة

راقب حالة خدمتنا:

  • صفحة الحالة (قريباً)
  • تابع @mindsai_co للتحديثات

تواصل مع الدعم

إذا واجهت:

  • أخطاء 500 مستمرة
  • rate limiting غير صحيح
  • سلوك غير متوقع

تواصل معنا:

راجع الوثائق

مرجع رموز الحالة

مرجع سريع لجميع رموز حالة HTTP:

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