تتبع كل الأخطاء RFC 7807. جسم الاستجابة بصيغة application/problem+json يحوي الحقول type وtitle وstatus وdetail وrequest_id واختيارياً reason أو errors[].

{
  "type": "https://www.kernelhost.com/en/reseller-api/errors/payment_required",
  "title": "Payment required",
  "status": 402,
  "detail": "The order could not be paid.",
  "request_id": "01HX7Z3K8Q...",
  "reason": "insufficient_credit_and_no_card"
}
HTTPtypeالمعنى
400validation_failedفشل التحقق من المدخلات. راجع errors[] لتفاصيل كل حقل.
401auth_failedفشلت المصادقة. يوضح reason السبب: missing_headers، bad_key، bad_timestamp، timestamp_out_of_window، bad_nonce، bad_signature، signature_mismatch، replay_detected، unknown_or_locked_key، ip_not_allowed.
402payment_requiredمطلوب الدفع. راجع reason أدناه.
403forbidden_scopeالإذن مفقود. reason: missing_scope.
404not_foundالمورد غير موجود أو غير مرئي لهذا المفتاح (يمنع تعداد المستأجرين).
409idempotency_conflictIdempotency-Key مُستخدَم من قبل بجسم مختلف.
429rate_limitedتم تجاوز حد المعدل. التزم بترويسة Retry-After.
500internal_errorخطأ داخلي في الخادم. قدّم request_id للربط مع سجل التدقيق عند التواصل مع الدعم.

أسباب الطلب الدفعي (HTTP 402)

حين يتعذّر دفع الطلبية، تُعيد الواجهة HTTP 402 مع reason قابل للقراءة آلياً في جسم JSON.

  • insufficient_credit_and_no_card (الرصيد غير كافٍ ولا توجد بطاقة محفوظة. الحل: شحن الرصيد أو إضافة بطاقة في بوابة العملاء.)
  • card_declined (رُفضت البطاقة من قِبل البنك أو البوابة. الحل: تجربة بطاقة أخرى أو التواصل مع البنك.)
  • card_expired (البطاقة منتهية الصلاحية. الحل: إضافة بطاقة جديدة في بوابة العملاء.)
  • client_not_found (معرّف الحساب غير موجود (لا يحدث عملياً تقريباً، تواصل مع الدعم).)