تخطَّ إلى المحتوى

رموز الأخطاء

عند الفشل، تحقق من رمز حالة HTTP وحقل message.

أخطاء الأعمال تُرجع دائماً رمزاً (code) قابلاً للقراءة آلياً لتتمكن من التفرع برمجياً. أما المعاملات غير الصالحة (التحقق) والمسارات غير الموجودة فتُرجع بنية Laravel القياسية: { “message”: ”…”, “errors”: { … } }. تحقق من المدخلات قبل الإرسال.

{
"code": "insufficient_balance",
"message": "Insufficient balance. Please top up and try again."
}
codeHTTPالوصف
unauthorized401مفتاح API مفقود أو غير صالح أو معطّل.
account_banned403الحساب موقوف. تواصل مع الدعم.
invalid_realtime_request400طلب فوري غير صالح (مثل رقم هاتف بدون بادئة دولية + عند ترك country فارغاً).
idempotency_key_required400الطلبات الفورية تتطلب الترويسة Idempotency-Key.
invalid_idempotency_key422معرّف Idempotency-Key غير صالح: من 1 إلى 128 حرفاً من الحروف والأرقام و . _ : -
idempotency_conflict409استُخدم نفس المعرّف مع محتوى طلب مختلف.
request_in_progress409طلب فوري مطابق قيد المعالجة حالياً. أعد المحاولة بعد قليل (Retry-After: 1).
empty_input422الملف المرفوع لا يحتوي على صفوف قابلة للاستخدام.
product_not_found422المعرّف الفريد للمنتج غير موجود أو غير مفعّل.
product_mode_not_supported422نقطة النهاية هذه لا تقبل هذا النمط من المنتجات (منتجات الفحص الفوري لا تُرسل إلى نقاط المعالجة الجماهيرية).
invalid_country422المنتج لا يدعم الدولة المرسلة.
too_few_numbers422الإرسال أقل من الحد الأدنى للمنتج.
too_many_numbers422الإرسال يتجاوز الحد الأقصى للمنصة.
insufficient_balance402الرصيد غير كافٍ. اشحن ثم أعد المحاولة.
realtime_disabled403الفحص الفوري غير مفعّل لهذا الحساب.
realtime_rate_limited429تجاوزت حد معدل الطلبات الفورية. التزم بـ retry_after.
product_pricing_unavailable503لم يتم ضبط أسعار هذا المنتج بعد. تواصل مع الدعم.
detection_capacity_unavailable503لا توجد سعة فحص متاحة حالياً. أعد المحاولة لاحقاً.
realtime_route_unavailable503لا يوجد مسار فوري متاح. أعد المحاولة لاحقاً.
realtime_fact_cache_unavailable503إحدى خدمات الفحص الفوري غير متاحة مؤقتاً. أعد المحاولة لاحقاً.
realtime_rate_limiter_unavailable503محدد المعدل غير متاح مؤقتاً. أعد المحاولة لاحقاً.
internal_error500خطأ داخلي في الخادم. إعادة المحاولة بنفس المعرّف آمنة.

ليست كل الأعطال تحمل code. تُبلغ نقاط نهاية المهمة عن أربع حالات بحالة HTTP وmessage فقط، لأن تلك الأعطال تحدث قبل الوصول إلى مسار أخطاء الأعمال:

HTTPالحالةالجسم
404قيمة task_id غير موجودة أو تنتمي إلى حساب آخرmessage فقط
404GET /v1/tasks/{token}/download — ملف النتائج غير متاح أو منتهي الصلاحية أو لم يعد قابلًا للتنزيلmessage فقط
422GET /v1/tasks/{token}/result — النتيجة غير جاهزة: المهمة لم تكتمل، أو لم يُنشأ الملف، أو انتهت صلاحيتهmessage فقط
422فشل التحقق من معاملات الطلب{ "message": …, "errors": { … } }

اعتمد على حالة HTTP في هذه الحالات. أما message فهو للسجلات ولمن يقرأ الحادث، لا لمنطق التحكم.

تتوقف الاستجابة الصحيحة لأي فشل على ما إذا كان تكرار الطلب قد يُنتج نتيجة مختلفة.

إعادة المحاولة دون تغيير تكرّر الفشل نفسه.

unauthorized, account_banned, invalid_realtime_request, idempotency_key_required, invalid_idempotency_key, idempotency_conflict, empty_input, product_not_found, product_mode_not_supported, invalid_country, too_few_numbers, too_many_numbers, insufficient_balance, realtime_disabled, product_pricing_unavailable

عابر — يُفترض أن ينجح الطلب نفسه لاحقًا.

realtime_rate_limited, request_in_progress, detection_capacity_unavailable, realtime_route_unavailable, realtime_fact_cache_unavailable, realtime_rate_limiter_unavailable

قد يكون الطلب قد نُفّذ أو لم يُنفّذ. أعد المحاولة بالمفتاح نفسه.

internal_error