تخطّي إلى المحتوى
دليل API

الأخطاء

عرض بتنسيق Markdown تم التحديث

تفشل كل نقطة نهاية بالطريقة نفسها: حالة HTTP وغلاف JSON واحد.

JSON
{
  "error": {
    "type": "invalid_request",
    "code": "invalid_input",
    "message": "duration must be one of 5, 10.",
    "param": "duration",
    "details": [ { "param": "duration", "message": "duration must be one of 5, 10." } ],
    "request_id": null,
    "doc_url": "https://doitong.com/developers/docs/errors#invalid_input"
  }
}
الحقل المعنى
type الفئة العامة للخطأ. حدّد الإجراء بناءً عليها.
code السبب الدقيق، ثابت وقابل للقراءة آليًا. لكل رمز قسم أدناه؛ ويربط doc_url بهذا القسم.
message شرح مقروء للبشر، وآمن لتسجيله أو عرضه على مطوّر.
param معلمة الإدخال أو الرأس المسبّب للمشكلة، إن وُجد.
details في أخطاء الإدخال، كل مشكلة تم العثور عليها: [{ "param", "message" }].
request_id الطلب المعني، إن وُجد.

لا تُحتسب أي رسوم على استدعاء يُرجع خطأً. يظل الطلب الذي يفشل بعد قبوله بحالة failed، ويحمل error: { "type", "code", "message" } في كائن الطلب، وتُسترد تكلفته تلقائيًا.

الأنواع

النوع حالة HTTP الإجراء
invalid_request 400 أو 413 أو 422 أصلح الطلب. ستفشل إعادة المحاولة بالاستدعاء نفسه مجددًا.
authentication_error 401 أرسل مفتاحًا صالحًا في Authorization: Bearer <key>.
permission_error 403 استخدم مفتاحًا بالنطاق المطلوب.
not_found 404 تحقّق من معرّف النموذج أو معرّف الطلب.
insufficient_credits 402 اشحن رصيد API (top_up_url في الخطأ).
budget_exceeded 402 استُنفدت ميزانية المفتاح نفسه. نهائيًا: اطلب من مالك المفتاح رفعها.
conflict 409 المورد ليس في حالة تسمح بهذا الاستدعاء.
rate_limited 429 انتظر Retry-After ثانية، ثم أعد المحاولة.
upstream_error 502 فشل نظام النموذج الخلفي. من الآمن إعادة المحاولة باستخدام Idempotency-Key نفسه: سيُشغّل مجددًا؛ ولم تُفرض عليك رسوم.
service_unavailable 503 API متوقف مؤقتًا أو إحدى التبعيات متوقفة. أعد المحاولة لاحقًا.
internal_error 500 خطأ من جانبنا. أعد المحاولة؛ وإذا استمر، تواصل مع الدعم مرفقًا بالوقت وrequest_id.

الرموز

invalid_request

طلب عام غير صحيح البنية (400).

invalid_json

النص ليس JSON صالحًا (400).

invalid_body

النص JSON صالح لكنه ليس كائنًا؛ يجب أن يكون مدخل النموذج كائن JSON (400).

body_too_large

النص أكبر من 16 MB (413). ارفع الملفات الكبيرة ومرّر عنوان URL الخاص بها بدلًا من ذلك (راجع الملفات).

invalid_parameter

تحتوي معلمة استعلام على قيمة غير صحيحة، مثل limit خارج النطاق من 1 إلى 100، أو wait ليست رقمًا، أو status أو category غير معروفة، أو storage غير permanent / temporary (400). يحدّد param اسمها.

invalid_category

يحدّد GET /openapi.json?category= فئة غير موجودة (400). يسردها GET https://api.doitong.com/v1/categories.

invalid_cursor

لا ينتمي cursor الخاص باستدعاء قائمة إلى هذه القائمة (400). ابدأ مجددًا من دون مؤشر.

invalid_idempotency_key

رأس Idempotency-Key فارغ أو أطول من 255 محرفًا (400).

invalid_arguments

يحتوي استدعاء أداة MCP على وسيطة مفقودة أو غير صحيحة البنية (MCP فقط). يحدّد param اسم الوسيطة.

invalid_input

لا يجتاز مدخل النموذج التحقق (422): معلمة غير معروفة (تقترح الرسالة أقرب اسم صالح)، أو معلمة مطلوبة مفقودة، أو نوع غير صحيح، أو قيمة خارج القائمة أو النطاق المسموح به، أو ورود الاسم الأساسي والاسم الأصلي معًا بقيم مختلفة. تمثل param أول معلمة مخالفة، وتسرد details جميع المعلمات. لا تُفرض أي رسوم.

unsupported_file

يحتوي ملف على نوع لا نقبله (422)، مثل رفع بامتداد غير مدعوم، أو content_type لا يطابق الامتداد.

invalid_webhook_url

webhook_url ليس عنوان URL عامًا يبدأ بـ https:// (422). تُرفض العناوين الخاصة والمحلية والعناوين العادية التي تبدأ بـ http://.

missing_api_key

تحتاج نقطة النهاية إلى مفتاح API ولم يُرسل أي مفتاح (401).

invalid_api_key

المفتاح غير معروف أو ملغى أو منتهي الصلاحية (401).

insufficient_scope

يفتقر المفتاح إلى النطاق الذي يحتاجه هذا الاستدعاء (403)، مثل models:run للتشغيل، أو models:read لقراءة الطلبات والرصيد. راجع المصادقة.

account_disabled

الحساب مغلق أو معلّق (403). لم تعد مفاتيحه تعمل.

not_found

المسار غير موجود (404).

model_not_found

لا يوجد نموذج عام بهذا المعرّف (404). اسرد النماذج باستخدام GET https://api.doitong.com/v1/models.

request_not_found

لا يوجد في حسابك طلب بهذا المعرّف (404). لا تظهر طلبات الحسابات الأخرى مطلقًا.

insufficient_credits

لا يغطي رصيد API في الحساب (أرصدة API، 1,000 رصيد API = ⁨‏1 $⁩ — وليس رصيد تطبيقات Doitong) تكلفة هذا الاستدعاء (402). تُرسل الاستجابة قبل فرض أي رسوم. يحتوي الخطأ على top_up_url؛ أضف المال من https://doitong.com/developers/dashboard#balance ثم أعد المحاولة.

JSON
{ "error": { "type": "insufficient_credits", "code": "insufficient_credits",
             "message": "This request costs 560 API credits ($0.56); the API balance is 120 API credits ($0.12). Top up at https://doitong.com/developers/dashboard#balance",
             "top_up_url": "https://doitong.com/developers/dashboard#balance", "doc_url": "https://doitong.com/developers/docs/errors#insufficient_credits" } }

budget_exceeded

سيتجاوز الاستدعاء ميزانية مفتاح API نفسه بأرصدة API (402). يحدّد مالك المفتاح الميزانية؛ ولن تفيد إعادة المحاولة حتى يرفعها.

conflict

يتعارض الاستدعاء مع الحالة الحالية للمورد (409).

idempotency_mismatch

استُخدم Idempotency-Key من قبل مع نص مختلف (409). استخدم مفتاحًا جديدًا لعملية جديدة.

idempotency_in_progress

يجري الآن إنشاء طلب باستخدام Idempotency-Key نفسه (409). أعد المحاولة بعد لحظة للحصول عليه.

request_active

لا يزال الطلب queued أو running، لذا لا توجد ملفات لحذفها بعد (409). احذفها بعد انتهائه.

not_cancelable

الطلب succeeded أو failed بالفعل، ولا يمكن إلغاؤه (409).

rate_limited

أجرى المفتاح عددًا كبيرًا من الطلبات في النافذة الحالية (429). راجع رأسي X-RateLimit-* وRetry-After.

too_many_inflight

لدى الحساب 10 طلبات queued أو running بالفعل (429). ابدأ الطلب التالي عند انتهاء أحدها.

upstream_error

رفض نظام النموذج الخلفي الطلب أو فشل فيه (502 عند التشغيل، أو failed بهذا الرمز في الطلب). تُسترد أرصدة API. إذا رفض النظام الخلفي المدخل نفسه، يُرجع الاستدعاء 422 invalid_input مع رسالته بدلًا من ذلك.

upstream_lost

لم يعد نظام النموذج الخلفي يعرف الطلب، لذا لن تصل أي نتيجة مطلقًا. ينتهي بحالة failed مع هذا الرمز (النوع upstream_error) وتُسترد تكلفته. شغّله مجددًا.

timeout

استمر الطلب مدة أطول من حده (15 دقيقة للصور، و60 للفيديو، و30 لغير ذلك) وأُوقف. ينتهي بحالة failed مع هذا الرمز وتُسترد تكلفته.

service_unavailable

توقف API مؤقتًا، أو توقفت تبعية مثل رفع الملفات (503). أعد المحاولة لاحقًا.

internal_error

حدث خلل من جانبنا (500). أعد المحاولة؛ وإذا استمر، تواصل مع الدعم.

charge_failed

تعذّر فرض الرسوم على الحساب بسبب مشكلة داخلية (500). يُعلّم الطلب بحالة failed؛ ولم يُخصم شيء. أعد المحاولة.

pricing_unavailable

لم يُضبط سعر النموذج، لذا لا يمكن عرض سعره أو تشغيله الآن (500).