بدء الاستخدام السريع
شغّل عملية التوليد الأولى خلال بضع دقائق. تتلقى النماذج 1,496 كلها النوع نفسه من الطلب وتُرجع كائن الطلب نفسه للصور والفيديو والصوت: تعلّمه مرة واحدة هنا.
1. احصل على مفتاح API
أنشئ مفتاحًا في https://doitong.com/developers/dashboard#keys واحتفظ به في متغير
بيئة: سيُعرض مرة واحدة فقط. يمكن لكل مفتاح حمل ميزانيته الخاصة، لذا يمكنك منحه إلى وكيل دون المخاطرة بالحساب
بالكامل. يعرض GET /account رصيد API الخاص بك.
export DOITONG_API_KEY="doitong_..."
curl "https://api.doitong.com/v1/account" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const res = await fetch("https://api.doitong.com/v1/account", {
headers: { Authorization: `Bearer ${process.env.DOITONG_API_KEY}` },
});
console.log(await res.json());
import os
import requests
r = requests.get(
"https://api.doitong.com/v1/account",
headers={"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}"},
)
print(r.json())
تُدفع العمليات من رصيد API في حسابك بوحدة أرصدة API: 1,000 رصيد API = 1 $، وتكلف كل النماذج سعر الجهة التي طوّرتها بالضبط. اشحن الرصيد من https://doitong.com/developers/dashboard#balance.
2. احصل على عرض السعر، ثم شغّل العملية
يتلقى POST /quote/{model_id} مدخل JSON ويُرجع السعر الدقيق. لا يحتاج إلى مفتاح ولا يكلّف شيئًا.
تشغيل المدخل نفسه يكلّف هذا السعر بالضبط: عرض السعر هو الرسوم. (الاستثناء هو النموذج الذي تُحتسب رسومه حسب
الاستخدام: عرض السعر فيه هو الحد الأقصى الذي قد تكلّفه العملية، ويُسترد الجزء غير المستخدم بعد انتهاء العملية.)
curl -X POST "https://api.doitong.com/v1/quote/kling-video/v3/pro/image-to-video" \
-H "Content-Type: application/json" \
-d '{"image": "https://example.com/fox.jpg", "duration": 5, "generate_audio": true}'
const res = await fetch("https://api.doitong.com/v1/quote/kling-video/v3/pro/image-to-video", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ image: "https://example.com/fox.jpg", duration: 5, generate_audio: true }),
});
const quote = await res.json();
console.log(quote.credits, quote.usd); // 840 "0.84"
import requests
r = requests.post(
"https://api.doitong.com/v1/quote/kling-video/v3/pro/image-to-video",
json={"image": "https://example.com/fox.jpg", "duration": 5, "generate_audio": True},
)
print(r.json()["credits"], r.json()["usd"]) # 840 0.84
{
"object": "quote",
"model": "kling-video/v3/pro/image-to-video",
"credits": 840,
"usd": "0.84",
"unit": "second",
"quantity": 5,
"unit_credits": 168,
"mode": "exact",
"breakdown": "5 s × 168 API credits"
}
أرسل بعد ذلك الجسم نفسه إلى POST /run/{model_id}. أضف ?wait=20 لإبقاء الاتصال مفتوحًا لمدة تصل إلى 20 ثانية: يُرجع
النموذج السريع النتيجة المكتملة في رحلة ذهاب وإياب واحدة. أرسل ترويسة Idempotency-Key حتى لا يؤدي تكرار الطلب إلى
تشغيل العملية أو احتساب رسومها مرتين.
curl -X POST "https://api.doitong.com/v1/run/flux/schnell?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: lighthouse-001" \
-d '{"prompt": "A lighthouse on a rocky coast at dusk, warm light in the window"}'
const res = await fetch("https://api.doitong.com/v1/run/flux/schnell?wait=20", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DOITONG_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": "lighthouse-001",
},
body: JSON.stringify({ prompt: "A lighthouse on a rocky coast at dusk, warm light in the window" }),
});
const request = await res.json();
console.log(request.status, request.outputs[0]?.url);
import os
import requests
r = requests.post(
"https://api.doitong.com/v1/run/flux/schnell",
params={"wait": 20},
headers={
"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}",
"Idempotency-Key": "lighthouse-001",
},
json={"prompt": "A lighthouse on a rocky coast at dusk, warm light in the window"},
)
request = r.json()
print(request["status"], request["outputs"][0]["url"] if request["outputs"] else None)
الاستجابة هي كائن طلب:
{
"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
"object": "request",
"model": "flux/schnell",
"status": "succeeded",
"cost": { "credits": 3, "usd": "0.003", "charged": 3, "refunded": 0 },
"outputs": [
{ "type": "image", "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
"content_type": "image/jpeg", "width": 1024, "height": 768, "stored": true }
],
"error": null
}
3. تابع الحالة
إذا كان النموذج لا يزال يعمل عند انتهاء وقت الانتظار، فستحصل على 202 Accepted مع id الطلب وstatus الحالي.
يمر كل طلب بدورة الحياة نفسها:
-
queuedتم القبول وخصم التكلفة، وبانتظار عامل -
runningالنموذج قيد التوليد -
الحالات النهائية:
succeededتم خصم تكلفة العرض؛ تحتوي outputs[] على عناوين URL في مساحة التخزين لديناfailedتم رد التكلفة تلقائيًا؛ يوضح الخطأ السببcanceledتم الإيقاف قبل ظهور نتيجة؛ وتم رد التكلفة
اقرأ الطلب مرة أخرى باستخدام معرّفه. يعمل ?wait=20 هنا أيضًا، لذا تكفي حلقة بسيطة:
curl "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const headers = { Authorization: `Bearer ${process.env.DOITONG_API_KEY}` };
let request = await (await fetch("https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20", { headers })).json();
while (request.status === "queued" || request.status === "running") {
const res = await fetch(`https://api.doitong.com/v1/requests/${request.id}?wait=20`, { headers });
request = await res.json();
}
console.log(request.status, request.outputs[0]?.url);
import os
import requests
headers = {"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}"}
request = {"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t", "status": "queued"}
while request["status"] in ("queued", "running"):
request = requests.get(
f"https://api.doitong.com/v1/requests/{request['id']}",
params={"wait": 20},
headers=headers,
).json()
print(request["status"], request["outputs"][0]["url"] if request["outputs"] else None)
عندما تكون قيمة status هي succeeded، يحتوي outputs[].url على روابط إلى الملفات في مساحة التخزين لدينا. إذا كان
الطلب failed أو canceled، تُسترد أرصدة API الخاصة به تلقائيًا، ويشرح error السبب. ألغِ أي شيء لا يزال في حالة
queued أو running:
curl -X POST "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel" \
-H "Authorization: Bearer $DOITONG_API_KEY"
بالنسبة إلى مهام الفيديو الطويلة، يمكنك تجاوز الاستطلاع وتمرير webhook_url بدلًا من ذلك (راجع ويب هوك).
4. الملفات
مرّر أي عنوان URL عام كمدخل، أو اطلب من POST /files عنوان URL للرفع، ثم استخدم PUT لوضع الملف هناك واستعمل
file_url المُعاد (راجع الملفات). يسرد الطلب الناجح نتائجه في outputs[] مع
النوع ونوع المحتوى، وعند توفرها، الأبعاد والمدة.
curl -X POST "https://api.doitong.com/v1/files" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filename": "fox.jpg", "content_type": "image/jpeg", "size": 482113}'
الأخطاء
يفشل كل نموذج بالطريقة نفسها: غلاف واحد يحتوي على type وcode دقيق وparam المخالف وكل مشكلة في details،
بحيث يتمكن الوكيل من إصلاح الطلب دون قراءة نصوص مطولة. لا تُحتسب أي رسوم على الطلب غير الصالح.
{
"error": {
"type": "invalid_request",
"code": "invalid_input",
"message": "duration must be one of 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.",
"param": "duration",
"details": [ { "param": "duration", "message": "duration must be one of 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15." } ],
"request_id": null,
"doc_url": "https://doitong.com/developers/docs/errors#invalid_input"
}
}
تجد كل نوع وكل رمز في الأخطاء.
التسعير
تُعرض الأسعار بالدولار الأمريكي وبأرصدة API في صفحة كل نموذج قبل التشغيل. يحمل كل طلب cost مع
credits وusd وcharged وrefunded. تُحتسب رسوم العملية عند قبولها؛ وتُسترد رسوم الطلبات failed وcanceled
تلقائيًا. تُسعّر بعض النماذج بدقة استنادًا إلى المدخل، وبعضها حسب طول الملفات التي ترسلها أو حجمها، بينما تحتسب
نماذج أخرى سعرًا تقديريًا لكل عملية: في كل الأحوال، ما تدفعه هو عرض السعر. تُحتسب رسوم بعض النماذج القليلة
(نماذج اللغة والرؤية، والصوت، وأدوات وقت المعالجة) حسب الاستخدام: عرض السعر هو الحد الأقصى الذي قد تكلّفه العملية،
ويُسترد تلقائيًا الجزء الذي لم تستخدمه العملية. راجع التسعير.
MCP والوكلاء بالذكاء الاصطناعي
صِل أي عميل MCP بـ https://api.doitong.com/v1/mcp باستخدام مفتاح Bearer نفسه. يمكن لوكيلك البحث في الكتالوج، والحصول على عروض
أسعار النماذج وتشغيلها، وقراءة كل صفحة من صفحات التوثيق بصيغة Markdown.
claude mcp add --transport http doitong-models https://api.doitong.com/v1/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
الخطوات التالية
- تصفّح كل النماذج. تحتوي كل صفحة على منشئ طلبات يكتب الشيفرة نيابةً عنك.
- تعلّم دورة حياة الطلب: الطلبات.
- استخدم أسماء المعلمات نفسها مع كل نموذج: المعلمات.
- هل تعمل مع وكيل برمجة بالذكاء الاصطناعي؟ امنحه https://doitong.com/developers/llms.txt أو صِل خادم MCP.